让IE用文字字符串“$ 0”替换正则表达式

时间:2011-05-16 23:41:30

标签: javascript regex replace

我正在使用美元金额替换正则表达式中的一堆值。问题是在IE中,如果我尝试用$0(或理论上,$1 - $9)替换,则替换永远不会发生,因为它正在尝试替换一个不存在的群体:

'foo'.replace(/f/g, '$0');

我希望替换的结果是“$ 0oo”,它在Chrome& FF,但不是IE9(尚未尝试其他版本的IE)。

Chrome& FF有以下“问题”,因为我无法弄清楚如何用文字$1替换:

'foo'.replace(/(f)/g, '$1')

4 个答案:

答案 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获取文字而不是'特殊'字符(如“$”)通常涉及加倍或用“\”作为前缀。