我正在尝试编写一个正则表达式,如果它不包含<
不是>
,则会在q
和\q
之间的任何内容上拆分。这就是我的意思:
split nope split
v v v
test1< test2 > test3 <tesqt4> test5 < tes\qt6>
我想在不使用前瞻或外观的情况下这样做。
到目前为止,这是我所拥有的,但它仍然不起作用^<(?:[^\\][^q]*)*>
答案 0 :(得分:3)
你很亲密;试试这个
<([^>q\\]*(\\[^>])?)*>
这也会将<test\\q>
之类的案例视为无效,并会拒绝格式错误的<test\>
。如果您想接受后者,请将[^>]
更改为通配符.
。
它的工作原理是允许结束标记,无效q
或转义\
。然后它检查下一位是否是有效的转义序列,然后“循环”,直到找到结束>
更新:正如评论中所指出的,这是一个更好的版本
<(\\[^>]|[^\\>q])*>
它在Chrome上的速度提高了一倍(http://jsperf.com/nested-regex-quantifiers-vs-or)也可以更容易理解,因为它在每个字符级别工作。