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

6
使用以下代码:
var x = 'foo';
console.log(x.replace(x, "\\$&"));​

输出结果为 '\foo',如下所示:http://jsfiddle.net/mPKEx/
为什么不是?
'\\$&"?

我正在将所有的x替换为"\$&",这只是一个简单的字符串,为什么string.replace在第二个参数不做任何替换的情况下会进行一些疯狂的替换操作呢?


1
你刚好选择了那些字符,这有点奇怪。从你的角度来看,这可能看起来像是一个错误。 - ChaosPandion
我正在用一个非常大的文本块替换某些内容,这个文本块恰好包含了那些字符,我花了很长时间才缩小到那些字符是原因。 - asutherland
我的工作中有25%的时间是用来追踪这样的小问题。 - ChaosPandion
2个回答

9

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

$$ - 插入"$"符号
$& - 引用当前模式匹配的整个文本。
$` - 引用当前模式匹配左侧的文本。
$' - 引用当前模式匹配右侧的文本。
$n或$nn - 在第一个参数为RegExp对象的情况下,插入第n个括号子匹配的字符串。

(参考资料)


参数讲得通。这是我替换的一个非常长的文本字符串的一部分,花了我很长时间才发现这些字符是问题所在,感谢您的帮助! - asutherland
1
更好的参考资料:http://ecma262-5.com/ELS5_HTML.htm#Section_15.5.4.11,解释了$语法的其他变体。 - Incognito

2

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接