shashank chaudhary
shashank chaudhary

Reputation: 115

Replace function returning string with repeated characters in javascript

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!#$&amp;</span>'()*+,-./:;&lt;=&gt;?@[]^_`{|}"

but for some reason i am getting this:

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

the characters CR_557!# are getting repeated for some reason not sure why.

Upvotes: 0

Views: 69

Answers (1)

Heretic Monkey
Heretic Monkey

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!#$&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());

Upvotes: 2

Related Questions