我正在尝试突出显示(使用<mark
)另一个字符串中的搜索字符串,但是它不应该是标签的一部分(即,te
中的<cite>
不应该匹配,但是te
中的test
>应该)。我一直在使用这样的代码将匹配项替换为列出的第二个正则表达式,但是只能嵌套使用。
someElement.innerHTML.replace(regex, function(full, before, match, after) {
return before + '<mark>' + match + '</mark>' + after;
});
我尝试过的建议:
<\/\w*>(\w*\s*)*(te)(\w*\s*)*<([a-z]*\s*\w*="\w*")*>
(完全不匹配?)(<.+?>[^<>]*?.*)(te)(.*[^<>]*?<.+?>)
(仅适用于嵌套标签)((<.+?>[^<>]*?)?.*)(te)(.*([^<>]*?<.+?>)?)
(.replace
给出未定义的)例:
要包装的字符串:
te
输入文本:
‘This is a test string’
<cite> — some test wrapped too</cite>
预期产量:
‘This is a <mark>te</mark>st string’
<cite> — some <mark>te</mark>st wrapped too</cite>
我浏览了很多“重复项”,但找不到确切的重复项,但是如果有人可以带领我找到一个可行的示例,那也将很可爱,谢谢!
现在删除的最适合我的答案是
(te)(?![^<]*>)
(通过revo)。但是,如果下一个字符为>
,则此方法不起作用,但我将其视为未解决的边缘情况。 最佳答案
正则表达式:
(te)(?!\w*>)
负前瞻检查它是否在开始/结束标签内,这是有益的。
(?!\w*>)
这将忽略任何te
,其后是任何单词字符和>
(这可能表示在标签名称中。)失败情况:
如果输入字符串中可能存在像
test>
(未配对)之类的字符串,即使它不是标签也不会匹配。Live demo
关于javascript - 如何将不属于标签的文本包装在标签中?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/39194516/