0

我正在尝试编写一个正则表达式,它将拆分之间的任何内容<>如果它不包含 a ,那么它q不是 a \q。这就是我的意思:

       split           nope             split
         v              v                 v
test1< test2 > test3 <tesqt4> test5 < tes\qt6>

我想在不使用前瞻或后视的情况下做到这一点。

这是我到目前为止所拥有的,但它仍然无法正常工作^<(?:[^\\][^q]*)*>

4

1 回答 1

3

你很接近; 尝试这个

<([^>q\\]*(\\[^>])?)*>

这也会将类似的情况识别<test\\q>为无效,并拒绝格式错误的<test\>. 如果要接受后者,请将 更改[^>]为通配符.

它的工作原理是允许结束标记、无效q或转义之前的任何内容\。然后它检查下一位是否是有效的转义序列,然后“循环”,直到找到关闭>

更新:正如评论中指出的,这是一个更好的版本

<(\\[^>]|[^\\>q])*>

它在 Chrome ( http://jsperf.com/nested-regex-quantifiers-vs-or )上的速度大约是原来的两倍 也更容易理解,因为它是在每个字符的级别上工作的。

于 2013-03-18T00:45:24.320 回答