替换包含$&的字符串在JavaScript正则表达式

时间:2015-12-02 10:27:09

标签: javascript regex

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

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

我需要&#34; $&lt;匿名&gt;&#34; 作为输出,但我得到&#34; {NAME} lt;匿名&gt;&#34; 作为输出。这是因为&#34; $&amp;&#34;匹配整个比赛&#34; {NAME}&#34;并替换&#34; $&amp;&#34;与&#34; {NAME}&#34;。

任何人都可以建议我如何在JavaScript中实现这一目标?

2 个答案:

答案 0 :(得分:4)

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

您需要使用

{NAME}

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

请参阅String#replace reference

  

模式插入
   var htmlstring = "<div>{NAME}</div>"; var name = "$$&lt;Anonymous&gt;" //Encoded form of "$<Annonymous>"; html = htmlstring.replace(/{NAME}/g,name); document.write(html); 插入“$”    $$ 插入匹配的子字符串。

答案 1 :(得分:3)

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

enter image description here

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

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);