我正在使用美元金额替换正则表达式中的一堆值。问题是在IE中,如果我尝试用$0
(或理论上,$1
- $9
)替换,则替换永远不会发生,因为它正在尝试替换一个不存在的群体:
'foo'.replace(/f/g, '$0');
我希望替换的结果是“$ 0oo”,它在Chrome& FF,但不是IE9(尚未尝试其他版本的IE)。
Chrome& FF有以下“问题”,因为我无法弄清楚如何用文字$1
替换:
'foo'.replace(/(f)/g, '$1')
答案 0 :(得分:8)
撰写"$$0"
以逃避$
标志。
答案 1 :(得分:4)
在Chrome和Firefox中,您可以使用函数作为替换函数的第二个参数来解决此限制:
'foo'.replace(/(f)/g, function(){return '$1';}); // => $1oo
我自己的测试表明IE8在这个问题上与其他浏览器一致。
答案 2 :(得分:2)
问题:
'My Bank balance is {0} '.replace(/\{0\}/,'$0.22')
results: "My Bank balance is {0}.22 "
This is not what we want
解决方案:
'My Bank balance is {0} '.replace(/\{0\}/,'$$0.22')
results: "My Bank balance is $0.22 "
'My Bank balance is {0} '.replace(/\{0\}/,"$0.22".replace(/\$/,'$$$$'))
result: "My Bank balance is $0.22 "
说明:我试图找到'$'并用'$$'替换。要匹配'$',您必须通过'\''来逃避它,并且要替换'$$$$',您必须将四个'$'作为RegEx转义'$'换取'$$'。有趣!!
答案 3 :(得分:1)
@SLaks应该更像:为文字“$”写“$$”。
@cwolves获取文字而不是'特殊'字符(如“$”)通常涉及加倍或用“\”作为前缀。