我正在尝试在单个正则表达式中匹配多个正则表达式。
鉴于两个非常复杂的正则表达式,我如何将它们分开,然后将它们放入一个匹配两者的表达式中。我认为这是使用正则表达式OR管道,但似乎没有像我预期的那样工作。
作为一个基本的例子,我正在使用以下正则表达式:
(?:\s*(\w+)\s*:)|(?:\:\s*(\w+)\s*\,)
使用以下字符串进行测试:
{key: value, name: "John", age: 17}
并期望它捕获两个(\w+)
捕获组:
key
,value
,name
和 age
但它只捕获key
,name
和age
而不是 value
。
我可以确认我的表达式的第二部分(在OR管道之后)确实与value
匹配时省略了表达式的第一部分(在OR之前)管)
有人可以解释并提供一个解决方案,说明为什么它不匹配key
和value
,只匹配key
。
答案 0 :(得分:0)
在我的表情中,某些原因导致OR管道不起作用:/
有人可以解释一下吗……
实际上,KinSlayerUY使用“您正在捕获:在两个组中都捕获,所以|不能同时匹配两者”,确实解释了为什么某些原因导致OR管道不起作用。换句话说:由于|
左侧的替代项已经包含:
之后的key
,因此没有:
可用于将右侧替代项与{{ 1}}(请记住匹配项不会重叠)。
答案 1 :(得分:-1)