我在macOS / iOS上的Safari浏览器中遇到错误
考虑到我需要用实际价格替换占位符
const formattedPrice = '$1,100.00';
str.replace( /\|\|TOTAL_REPAYMENT_CHARGES\|\|/g, formattedPrice);
以上结果为,100.00
但是如果我使用下面的一个,它会起作用
const formattedPrice = '$1,100.00';
str.replace( '||TOTAL_REPAYMENT_CHARGES||', formattedPrice)
结果将是$1,100.00
有人可以解释发生了什么吗?谢谢
[当.replace
的第一个参数是正则表达式,而.replace
的第二个参数是字符串时,JS会解析第二个参数according to some rules,从而可以用完全匹配或捕获组进行简洁的替换。例如,$&
表示替换为完全匹配:
console.log('foo'.replace(/o/g, 'a$&'));
上面,每个匹配项都被替换为a
,然后是完全匹配项,并且两个完全匹配项都是o
,因此两个匹配项都被替换为ao
。
在您的代码中,$1
被解释为“用第一个捕获组替换此部分”。但是您的代码没有任何捕获组,因此,匹配项没有替换为'$1,100.00'
,而是替换为',100.00'
。
要表示文字$
,请使用two $
,如下所示:
const formattedPrice = '$$1,100.00';
// ^
str.replace( /\|\|TOTAL_REPAYMENT_CHARGES\|\|/g, formattedPrice);