正则表达式在`q`上拆分,如果不是`&q;里面的`\ q``

时间:2013-03-18 00:36:32

标签: javascript regex

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

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

我想在不使用前瞻或外观的情况下这样做。

到目前为止,这是我所拥有的,但它仍然不起作用^<(?:[^\\][^q]*)*>

1 个答案:

答案 0 :(得分:3)

你很亲密;试试这个

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

这也会将<test\\q>之类的案例视为无效,并会拒绝格式错误的<test\>。如果您想接受后者,请将[^>]更改为通配符.

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

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

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

它在Chrome上的速度提高了一倍(http://jsperf.com/nested-regex-quantifiers-vs-or)也可以更容易理解,因为它在每个字符级别工作。