匹配所有&#34; es&#34;在&#34;测试<测试>测试</test>测试&#34;不在尖括号之间

时间:2015-11-11 15:36:00

标签: regex

在字符串&#34; test&lt; test&gt;中测试&lt; / test&gt;测试&#34;我想只匹配&#34; es&#34;:

的这些事件

&#34; t es t&lt; test&gt; t es t&lt; / test&gt;吨的 ES T&#34;

任何人都知道如何做到这一点?

这与可能重复的 Regex replace text outside html tags不同,其结果为

&#34; t es t&lt; test&gt;测试&lt; / test&gt; t es t&#34;,作为内部&#34; es&#34;没有得到匹配

更新:忘了提及&lt; test&gt;应该可以替换为&lt; any stuff =&#34; test&#34;&gt; ...&lt; / any&gt;或者&lt;测试一些=&#34;东西&#34;&gt; ...&lt; / testing&gt;。

JavaScript正则表达式。

3 个答案:

答案 0 :(得分:1)

如果是PCRE,你可以skip标签

<[^>]*>(*SKIP)(*F)|es

<字面上匹配,后跟negated class [^>]*任意数量的字符,不是>后跟文字>而是跳过{{1} }}或|在剩余文本中匹配。

Demo at regex101。或者使用lookahead

es

匹配es(?![^<]*>) 字面意思es启动否定前瞻,检查是否在结束(?!之前没有>。如果没有任何数量的non <后面跟着文字<

See demo at regex101

答案 1 :(得分:0)

您可以尝试:DEMO

<test>|<\/test>|(es)

匹配标签,但仅捕获非标签。

答案 2 :(得分:0)

Try /(es)(?=[^>]*(?:<|$))/g yourself or view it in the tester

它使用正向前瞻以确保关闭角度括号以外的任何内容,直到下一个开口角括号或字符串的末尾。

请注意,look-around assertions具有不同的支持,具体取决于您使用的风格。不过,你可能会因为前瞻而幸运。