Javascript 将元素环绕在字符串的每个匹配项上

Javascript 将元素环绕在字符串的每个匹配项上,javascript,html,regex,Javascript,Html,Regex,我试图用来包装“example”一词的每一次出现。我知道我需要通过RegExp来实现这一点,我已经有了类似的版本。但是,我还想检查并查看事件是否已包装在中。如果是的话,就忽略这一点 HTML: <span>This</span> <span>Example</span>. <div> Here is my example text. I will be looking to highlight the word <s

我试图用
来包装“example”一词的每一次出现。我知道我需要通过
RegExp
来实现这一点,我已经有了类似的版本。但是,我还想检查并查看事件是否已包装在
中。如果是的话,就忽略这一点

HTML:

  <span>This</span>
  <span>Example</span>.

  <div> Here is my example text. I will be looking to highlight the word <span class="blue-underline">example.</span> </div>
</body>
这个
例子。
这是我的示例文本。我将重点介绍单词示例。
JS:

let target='example';
var text=document.querySelector('body').textContent;
var regex=new RegExp(“(“+target+”)”,“ig”);
const newtext=text.replace(正则表达式“”);
text.innerHTML=newtext;
这也是我的名字


有没有办法通过编程实现这一点?

您的代码似乎工作得很好,我想只有两个错误:在结尾
text.innerHTML…
->
document.body.innerHTML…
并且在开始时你应该使用
…body')。innerHTML
而不是
.textContent
来保持
innerHTML
上的标记@Gui3的优点,如果“example”@WiktorStribiżew这个词周围有一个
span
,我仍在试图找到一种忽略替换的方法。这个可以重新打开吗?尽管它需要正则表达式,但解决方案需要XPath,我正在开发一个solution@WiktorStribiżew我的答案将涉及使用类似于
var text=document.evaluate(//body//text()[not(祖先::span)和contains(translate(,'abcdefghijklmnopqrstuvxyz','abcdefghijklmnopqrstuvxyz'),'example'),'document的东西)。我不确定这是否适用于其他十亿个问题。@Wiktor Stribiżew在结束时链接到的问题似乎是将整个文档解析为单独的span标记。我不想解析和修改整个东西,我需要一种方法:1。选择所有引用,2。检查它们是否包装在元素3中。如果没有,请更换
let target = 'example';
var text = document.querySelector('body').textContent;

var regex = new RegExp('(' + target + ')', 'ig');
const newtext = text.replace(regex, '<a href="#" class="highlight">$1</a>');

text.innerHTML = newtext;