如何正确排除正则表达式中的组?

时间:2016-08-18 20:36:45

标签: javascript html regex

我需要在某些文本中匹配一些模式,但这种模式不应该有另一种模式。 我在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 |,因此将<>放入[]并不是我需要的解决方案。

1 个答案:

答案 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演示:

(...)