【问题标题】:javascript - Better Way to Escape Dollar Signs in the String Used By String.prototype.replacejavascript - 在 String.prototype.replace 使用的字符串中转义美元符号的更好方法
【发布时间】:2015-03-22 01:18:32
【问题描述】:

我想用另一个字符串替换一个字符串。我发现当replaceValue包含"$"时,replace会失败。所以我想先通过"$$" 逃脱"$"。代码如下:

var str = ..., reg = ...;
function replaceString(replaceValue) {
  str.replace(reg, replaceValue.replace(/\$/g, '$$$$'));
}

但我觉得这很丑,因为我需要写 4 个美元符号。

还有其他我需要逃脱的角色吗?有没有更好的方法来做到这一点?

【问题讨论】:

    标签: javascript regex replace escaping


    【解决方案1】:

    有一种方法可以拨打replace,这样我们就不用担心逃避任何事情了。

    var str = ..., reg = ...;
    function replaceString(replaceValue) {
      return str.replace(reg, function () { return replaceValue });
    }
    

    【讨论】:

    • 具体来说,重点是将替换字符串包裹在一个函数中;这样就不会对其进行转义。
    【解决方案2】:

    您对替换字符串进行转义的方法是正确的。

    根据ECMAScript specification edition 5.1的第15.5.4.11节String.prototype.replace,所有特殊替换序列都以$开头($&$`$'$n$nn)和$$ 在替换中指定一个 $

    因此,如果要按字面处理替换文本,则可以像您现在正在做的那样使用 double $$ 转义所有 $

    据我所知,没有其他简洁的方法可以进行替换。

    【讨论】:

      【解决方案3】:

      很遗憾,您对此无能为力。
      这就是 JavaScript 与正则表达式一起工作的方式。

      这是一篇很好的文章,其中列出了您应该注意的所有替换模式: http://es5.github.io/#x15.5.4.11

      【讨论】:

      • 这篇文章没有说要避免它们。相反,它们是替换字符串的语法。
      • 正确。但请参阅 OP 的问题:Is there any other charactors that I need to escape?。这篇文章提供了他应该知道的模式。
      • 我认为您应该将措辞更改为:“...所有替换模式的列表,您的方法在逃避它们方面做得很好”
      • @nhahtdh,按我的方式编辑。感谢您的意见!
      猜你喜欢
      • 2021-04-25
      • 2013-05-28
      • 2016-10-28
      • 1970-01-01
      • 2015-08-21
      • 2016-10-19
      • 1970-01-01
      • 1970-01-01
      • 2021-07-16
      相关资源
      最近更新 更多