正则expression式replacehtml标签之外的文本
我有这个HTML:
"This is simple html text <span class='simple'>simple simple text text</span> text" 我只需要匹配任何HTML标签之外的单词。 我的意思是,如果我想匹配“简单”和“文本”,我应该只从“这是简单的HTML文本”和最后一部分“文本”得到的结果 – 结果将是“简单”1匹配,“文本”2火柴。 任何人都可以帮助我吗? 我正在使用jQuery。
 var pattern = new RegExp("(\\b" + value + "\\b)", 'gi'); if (pattern.test(text)) { text = text.replace(pattern, "<span class='notranslate'>$1</span>"); } 
-   value是我想匹配的词(在这种情况下“简单”)
-   text是"This is simple html text <span class='simple'>simple simple text text</span> text"
 我需要用<span>包装所有选定的单词(在本例中它是“简单的”)。 但是我只想包装任何 HTML标签之外的单词。 这个例子的结果应该是 
 This is <span class='notranslate'>simple</span> html <span class='notranslate'>text</span> <span class='simple'>simple simple text text</span> <span class='notranslate'>text</span> 
我不想replace里面的任何文字
 <span class='simple'>simple simple text text</span> 
应该和更换前一样。
好的,尝试使用这个正则expression式:
 (text|simple)(?![^<]*>|[^<>]*</) 
在regex101上工作的例子 。
分解:
 ( # Open capture group text # Match 'text' | # Or simple # Match 'simple' ) # End capture group (?! # Negative lookahead start (will cause match to fail if contents match) [^<]* # Any number of non-'<' characters > # A > character | # Or [^<>]* # Any number of non-'<' and non-'>' characters </ # The characters < and / ) # End negative lookahead. 
 如果在html标签之间使用text或simple则负向预览会阻止匹配。 
 ^([^<]*)<\w+.*/\w+>([^<]*)$ 
然而,这是一个非常天真的expression。 使用DOMparsing器会更好。