2015-12-02 122 views
3

我需要用动态值替换一个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;匿名>”作为output.This是因为 “$ &” 整场比赛“相匹配{NAME}“,并将”$ &“替换为”{NAME}“。

任何人都可以提出如何在JavaScript中实现这一点?

+0

请考虑接受第一个提供正确答案(见[如何接受SO答案](http://meta.stackexchange.com/questions/5234/how-does-accepting-的回答工作))。 –

回答

4

在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 reference

模式插入
$$                  插入“$”。
$&                插入匹配的子串。

3

来自Docs of 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);