Sir*_*att 0 html javascript regex jquery
我正在使用我在stackoverflow上找到的正则表达式来环绕带有span标记的段落中的单词实例,以便用户可以单击每个内部单词以查看该单词的定义.这完全有效,但是,我遇到的问题是,有时段落中包含内容或标签的单词短语,例如标题.
作品:
<div id="passage">
<p>
Hello, my name is SirTophamHatt.
</p>
...
</div>
$('#passage').find('p').each(function() {
$(this).html(function (index, oldHtml) {
return oldHtml.replace(/\b(\w+?)\b/g, '<span class="word">$1</span>');
});
});
<div id="passage">
<p>
<span class="word">Hello</span>, <span class="word">my</span> <span class="word">name</span> <span class="word">is</span> <span class="word">SirTophamHatt</span>.
</p>
...
</div>
Run Code Online (Sandbox Code Playgroud)
不起作用:
<div id="passage">
<p>
<em>Hello, my name is SirTophamHatt.</em>
</p>
...
</div>
$('#passage').find('p').each(function() {
$(this).html(function (index, oldHtml) {
return oldHtml.replace(/\b(\w+?)\b/g, '<span class="word">$1</span>');
});
});
<div id="passage">
<p>
<
<span class="word">em</span>
>
<span class="word">Hello</span>,
<span class="word">my</span>
<span class="word">name</span>
<span class="word">is</span>
<span class="word">SirTophamHatt</span>
<!--<span class="word">-->em>
</p>
...
</div>
Run Code Online (Sandbox Code Playgroud)
为清楚起见,我将最后一段分开.
我对正则表达式不太满意; 如何修改模式,使其匹配所有未启动或关闭HTML标记的单词?
谢谢!
编辑:子元素中的单词必须包围它.必须忽略HTML标记本身.
EDIT2:匆忙的例子,没有提供正确的字符串替换使用.
您可以使用负前瞻来确保在没有开口角度支架的情况下,没有关闭的角度支架:
\b(\w+(?![^<>]*>))\b
^^^^^^^^^^^
Run Code Online (Sandbox Code Playgroud)
我认为你可以安全地删除?in \w+?,因为你匹配整个单词.