Замените функцию, возвращающую строку повторяющимися символами в javascript - PullRequest
0 голосов
/ 30 апреля 2020

рассмотрим следующую функцию

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! # Повторяются по какой-то причине, не зная почему.

1 Ответ

2 голосов
/ 30 апреля 2020

Как Андреас упоминает в комментарии , $& имеет особое значение в параметре замены String.prototype.replace.

Для решения проблемы используйте a function в качестве параметра замены :

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());
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...