Как я могу заменить в строке, но исключить некоторые слова - PullRequest
0 голосов
/ 22 декабря 2018

Как я могу заменить в строке, но исключить некоторые слова из замены

Пример:

str = "<div>I am a moron</div>";
code = "<div>" + str + "</div>;
newStr = code.replace(str, "I am not a moron");
//newStr = "I am not a moron"

Я хочу //newStr = "<div>I am not a moron</div>" Без добавления тегов div в методе замены

1 Ответ

0 голосов
/ 22 декабря 2018

Вам просто нужно использовать регулярное выражение, чтобы сопоставить div открытия и закрытия, чтобы вы могли поместить их обратно с соответствующими группами захвата, $1 и $2, внутри вашего вызова replace.

Кроме того, если вы не знакомы с регулярными выражениями, ознакомьтесь с этой демонстрацией RegExr , где вы можете поиграть.

Решение

var str = "<div>I am a moron</div>";
var regex = /(<div>)I am a moron(<\/div>)/;

newStr = str.replace(regex, "$1I am not a moron$2");

console.log(newStr);

Решение 2

Это более сложное решение, показывающее, как сопоставить несколько вложенных элементов для получения правильных групп захвата

var str = '<div class="foo bar2" data-taco="something"><ul><li>I am a moron</li></ul></div>';
var regex = /((?:<.*>)+)I am a moron((?:<\/.*>)+)/;

newStr = str.replace(regex, "$1I am not a moron$2");

console.log(newStr);

Решение 3

Это решение сфокусировано на поиске замены в HTML DOM вместо строки html

const container = document.getElementById('container');

container.innerHTML = container.innerHTML.replace(/I am a moron/,"I am not a moron");
<div id="container">
  <section>
    <div id="something" class="foo bar">
      <p>I am a moron</p>
    </div>
  </section>
</div>

Документация

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/replace

...