我正在尝试突出显示(<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
给出undefined's)示例:
要换行的字符串: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)。但是,如果下一个字符为>
,则无效,但我会将其视为未解决的边缘情况。
答案 0 :(得分:3)
正则表达式:
(te)(?!\w*>)
它可以从负向前瞻中获益,以检查它是否在开/关标签内。 (?!\w*>)
这将忽略任何单词字符和te
后面的>
(可能表示位于标记名称内)。
如果输入字符串中可能存在类似test>
(未配对)的字符串,即使它不是标记,也不匹配。