6

使用以下代码:

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

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

为什么不是

'\\$&"?

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

4

2 回答 2

9

$& 是 Javascript 字符串替换中的一个特殊引用。它指向匹配的字符串。

$$ - 插入一个“$”
$& - 指当前模式匹配的整个文本。
$` - 指当前模式匹配左侧的文本。
$' - 指当前模式匹配右侧的文本。
$n 或 $nn - 其中 n 或 nn 是十进制数字,插入带括号的第 n 个
            子匹配字符串,前提是第一个参数是 RegExp 对象。

参考

于 2012-09-07T03:08:42.930 回答
2

在你的情况下:

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

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

您可以指定一个函数作为第二个参数。上述特殊替换模式($$、$&、$`、$'、$n 或 $nn)不适用于这种情况。

于 2015-03-07T05:52:42.563 回答