Reputation: 115
consider following function
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());
the expected content for var html
in the end should be:
"<span style=\"background-color:#F2E9B7\">CR_557!#$&</span>'()*+,-./:;<=>?@[]^_`{|}"
but for some reason i am getting this:
"<span style=\"background-color:#F2E9B7\">CR_557!#CR_557!#$&amp;</span>'()*+,-./:;<=>?@[]^_`{|}"
the characters CR_557!# are getting repeated for some reason not sure why.
Upvotes: 0
Views: 69
Reputation: 12112
As Andreas mentions in a comment, $&
has a special meaning in the replacement parameter of String.prototype.replace
.
To solve the problem, use a function
as the replacement parameter:
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, function () { return newData });
}
console.log(myFunction());
Upvotes: 2