首页 > 解决方案 > 用javascript中的重复字符替换函数返回字符串

问题描述

考虑以下功能

function myFunction() {
  var html = "CR_557!#$&'()*+,-./:;<=>?@[]^_`{|}";
  var data = html.substring(0, 14);
  var newData = '<span style="background-color:#F2E9B7">' + data + '</span>';
  return html.replace(data, newData);
}

console.log(myFunction());

最后 var 的预期内容html应该是:

"<span style=\"background-color:#F2E9B7\">CR_557!#$&amp;</span>'()*+,-./:;&lt;=&gt;?@[]^_`{|}"

但由于某种原因,我得到了这个:

"<span style=\"background-color:#F2E9B7\">CR_557!#CR_557!#$&amp;amp;</span>'()*+,-./:;&lt;=&gt;?@[]^_`{|}"

字符 CR_557!# 由于某种原因被重复,不知道为什么。

标签: javascriptstring

解决方案


正如Andreas 在评论中提到的$&在替换参数中具有特殊含义String.prototype.replace

要解决此问题,请使用afunction作为替换参数

function myFunction() {
  var html = "CR_557!#$&amp;'()*+,-./:;&lt;=&gt;?@[]^_`{|}";
  var data = html.substring(0, 14);
  var newData = '<span style="background-color:#F2E9B7">' + data + '</span>';
  return html.replace(data, function () { return newData  });
}

console.log(myFunction());


推荐阅读