奇怪的Javascript字符串替换行为与$&

时间:2012-09-07 03:07:08

标签: javascript regex string replace

使用以下代码:

var x = 'foo';
console.log(x.replace(x, "\\$&"));​

输出为'\ foo',如下所示:http://jsfiddle.net/mPKEx/

为什么不是

'\\$&"?

我用“\ $&”替换所有x这只是一个计划旧的字符串,所以为什么string.replace做了一些疯狂的替换,当函数的第二个arg不应该做任何事情,除了得到替代...

2 个答案:

答案 0 :(得分:9)

$&安培;是Javascript的字符串替换中的特殊参考。 指向匹配的字符串。

$$ - Inserts a "$"
$& - Refers to the entire text of the current pattern match. 
$` - Refers to the text to the left of the current pattern match. 
$' - Refers to the text to the right of the current pattern match.
$n or $nn - Where n or nn are decimal digits, inserts the nth parenthesized
            submatch string, provided the first argument was a RegExp object.

Reference

答案 1 :(得分:2)

在你的情况下:

var x = 'foo';
console.log(x.replace(x, function() {return '\\$&'}));

查看差异:http://jsfiddle.net/mPKEx/10/

你可以specify a function as the second parameter。在这种情况下,上述特殊替换模式($$,$&,$`,$',$ n或$ nn)