Вам просто нужно использовать регулярное выражение, чтобы сопоставить 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