考虑ECMAScript RegEx
/\s*((ABC|A)(/(ABC|A)+)*)\s*/i
匹配A / ABC
使用反向引用,我试图通过将其重写为
来简化它/\s*((ABC|A)(/\2+)*)\s*/i
但这似乎只与A / A匹配
为什么我遇到这种行为,我可以在这里使用反向引用来简化RegEx吗? (我在http://www.regexr.com/)
在线测试答案 0 :(得分:0)
发生这种情况的原因是因为您拥有的新正则表达式只会A/A
或A/AA
或A/AAA
,(在/之后的任意数量的A' s) 。 (从技术上讲,它也会匹配ABC/ABC
或ABC/ABCABC
)
*
捕获组与(/\2+)
捕获组的任意数量匹配后的(/\2+)
。因此,除非您不关心A/A
之后的内容(即A/AFOO
),否则您可以执行与/\s*((ABC|A)(/\2+).*)\s*/i
匹配的A/A(whatever here)
,({{1} },A/ABC
,A/ADC
)
否则,我建议坚持使用原始正则表达式。