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

7
我需要用动态值(HTML编码)替换一个HTML字符串中的模式。
var htmlstring = "<div>{NAME}</div>";
var name = "$&lt;Anonymous&gt;"  //Encoded form of "$<Anonymous>";
html = htmlstring.replace(/{NAME}/g,name);

我需要获得"$<匿名>"作为输出,但我得到的是"{NAME}lt;匿名>"。这是因为"$&"匹配整个匹配"{NAME}"并用"{NAME}"替换"$&"。

有人能建议我如何在JavaScript中实现这一点吗?

2个回答

9

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

enter image description here

您可以使用replace回调函数来获取替换后字符串中的$&文字。

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


6
在 JavaScript 中,如果要替换为 $,需要使用另一个美元符号转义美元符号,否则,$& 会被视为对整个匹配值(即此处的 {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 参考文档

模式插入
$$        插入 "$"。
$&        插入匹配的子字符串。


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