我有这个
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>");
- }
值是我想要匹配的单词(在这种情况下是“简单”)
>文本是“这是简单的html文本< span class ='simple'>简单的简单文本文本< / span>文本”
我需要使用< 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>
我不想替换里面的任何文本
- <span class='simple'>simple simple text text</span>
它应该与更换前相同.
好的,尝试使用这个正则表达式:
- (text|simple)(?![^<]*>|[^<>]*</)
分解:
- ( # 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标签之间,负面的前瞻将阻止匹配.