【问题标题】:Replace string containing $& in JavaScript regex在 JavaScript 正则表达式中替换包含 $& 的字符串
【发布时间】:2015-12-02 10:27:08
【问题描述】:

我需要用动态值替换一个html字符串。这个动态值(HTML编码)是替换html字符串中的一个模式。

var htmlstring = "<div>{NAME}</div>";
var name = "$&lt;Anonymous&gt;"  //Encoded form of "$<Anonymous>";
html = htmlstring.replace(/{NAME}/g,name);

我需要 "$" 作为输出,但我得到 "{NAME}lt;Anonymous>" 作为输出。这是因为 "$& " 匹配整个匹配 "{NAME}" 并将 "$&" 替换为 "{NAME}"。

谁能建议我如何在 JavaScript 中实现这一点?

【问题讨论】:

    标签: javascript regex


    【解决方案1】:

    在 JavaScript 中,要替换为 $,您需要将美元符号转义为另一个美元符号,否则,$&amp; 将被视为对整个匹配值的反向引用(即此处为 {NAME})。

    你需要使用

    var name = "$$&lt;Anonymous&gt;"
                ^^
    

    var htmlstring = "<div>{NAME}</div>";
    var name = "$$&lt;Anonymous&gt;"  //Encoded form of "$<Annonymous>";
    html = htmlstring.replace(/{NAME}/g,name);
    document.write(html);

    String#replace reference:

    模式插入
    $$        插入“$”。
    $&amp;        插入匹配的子字符串。

    【讨论】:

      【解决方案2】:

      来自replace 的文档,$&amp; 插入匹配的子字符串。

      您可以使用替换回调来获取替换字符串中的$&amp; 文字。

      var htmlstring = "<div>{NAME}</div>";
      var name = "$&lt;Anonymous&gt;" //Encoded form of "$<Annonymous>";
      var html = htmlstring.replace(/{NAME}/g, function(m) {
        return name;
      });
      
      console.log(html);
      document.write(html);

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2013-01-21
        • 1970-01-01
        • 2011-02-17
        • 1970-01-01
        • 1970-01-01
        • 2018-07-13
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多