我需要在某些文本中匹配一些模式,但这种模式不应该有另一种模式。 我在html中使用了一些组和html页面没有添加新行。而不是在html中加入新行,所以我在这里遇到麻烦。
我尝试使用这个正则表达式:
/\|([^\r\n|]+?(?!<br>))\|/igm
,例如:
test1 | test2 | test3<br>| test4<br>| test5 |<br>test6
应仅匹配| test2 |
和群组test2
,但现在也匹配| test4<br>|
而非| test5 |
。我需要排除test4匹配,但不知道如何将其与[]
一起使用,因为它忽略了(?!<br>)
。
P.S。当然| test2 |
也可能是| text1 <span ...>text2</span> text3 |
,因此将<>
放入[]
并不是我需要的解决方案。
答案 0 :(得分:0)
您需要的正则表达式应该基于tempered greedy token:
/\|((?:(?!<br\s*\/?>)[^\r\n|])*)\|/gi
^^^^^^^^^^^^^^^^^^^^^^^^^^^
请参阅regex demo
令牌为(?:(?!<br\s*\/?>)[^\r\n|])*
,它匹配CR / LF / |
以外的任何字符([^\r\n|]
否定字符类除外)但未启动{{1}标记序列(或<br>
或<br >
或<br/>
等)
与令牌匹配的内容将被捕获到组#1中,因为它包含捕获括号<br />
。
JS演示:
(...)