一个JS字符串替换问题

Wayme
  • 144

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

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

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

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

回复
阅读 591
3 个回答

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

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

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

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

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

你知道吗?

宣传栏