一个JS字符串替换问题

提问编辑器里美元符号抱错-^-

在《JavaScript正则表打死迷你书》中有一段货币格式化的代码:

function format (num) {
 return num.toFixed(2).replace(/\B(?=(\d{3})+\b)/g, ",").replace(/^/, "$$ ");
};
console.log( format(1888) );
// => "$ 1,888.00"

请问这里为什么要用俩个美元符号,
而不是一个美元符号,
并且我在Chrome中用一个美元符号 也是正确的?

阅读 2k
3 个回答

和浏览器没关系。
这是因为 $ 符号在子串匹配中是有意义的,代表的是()中的子串,可以参考 MDN子串匹配说明 ,你这个题的场景反应不出来
换个场景: 用正则把一串只有小数部分的数字前面补位 1, 并在开头加上 $符号, 结尾加上 /月:

('.33').replace(/^(\.\d+)($)/, '$$1$1/月') //必须用两个$符号转义,否则$1代表第一个小括号的子匹配

('.33').replace(/^(\.\d+)($)/, '$1$1/月') //这是错误的演示,输出 .33.33/月

浏览器的问题吧 非IE和IE吧

你在多个浏览器中测试一下呢?

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题