【问题标题】:Odd JavasScript string replace behavior with $&奇怪的 JavaScript 字符串替换行为 $&
【发布时间】:2012-08-31 22:18:07
【问题描述】:

使用以下代码:

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

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

为什么没有

'\\$&"?

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

【问题讨论】:

  • 奇怪的是你恰好选择了这些角色。从您的角度来看,它可能看起来像一个错误。
  • 我用一大段文字替换了一些内容,其中恰好包含这些字符,我花了很长时间才将其缩小到这些字符是原因。
  • 我 25% 的工作是追查类似的小谜团。

标签: javascript regex string replace


【解决方案1】:

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

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

(Reference)

【讨论】:

  • Arg 有道理,这是我要替换的更大文本字符串的一部分,我花了很长时间才弄清楚这些字符是问题所在,感谢您的帮助!
  • 更好的参考:ecma262-5.com/ELS5_HTML.htm#Section_15.5.4.11,解释 $ 语法的其他变体。
【解决方案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)在这种情况下适用。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多