正则表达式OR管道无法正常工作

时间:2017-12-06 13:32:51

标签: regex

我正在尝试在单个正则表达式中匹配多个正则表达式。

鉴于两个非常复杂的正则表达式,我如何将它们分开,然后将它们放入一个匹配两者的表达式中。我认为这是使用正则表达式OR管道,但似乎没有像我预期的那样工作。

作为一个基本的例子,我正在使用以下正则表达式:

(?:\s*(\w+)\s*:)|(?:\:\s*(\w+)\s*\,)

使用以下字符串进行测试:

{key: value, name: "John", age: 17}

并期望它捕获两个(\w+)捕获组:

keyvaluename age

但它只捕获keynameage 而不是 value

我可以确认我的表达式的第二部分(在OR管道之后)确实与value匹配时省略了表达式的第一部分(在OR之前)管)

有人可以解释并提供一个解决方案,说明为什么它不匹配keyvalue,只匹配key

2 个答案:

答案 0 :(得分:0)

  

在我的表情中,某些原因导致OR管道不起作用:/

     

有人可以解释一下吗……

实际上,KinSlayerUY使用“您正在捕获:在两个组中都捕获,所以|不能同时匹配两者”,确实解释了为什么某些原因导致OR管道不起作用。换句话说:由于|左侧的替代项已经包含:之后的key,因此没有:可用于将右侧替代项与{{ 1}}(请记住匹配项不会重叠)。

答案 1 :(得分:-1)

似乎你正在捕获:在这两个组中,所以|不能匹配

这应该有效

(?:\s*(\w+)\s*:)|(?:\s*(\w+)\s*\,)

https://regex101.com/r/9EiCmr/2