使用反向引用简化RegEx

时间:2015-05-03 19:23:02

标签: javascript regex backreference

考虑ECMAScript RegEx

/\s*((ABC|A)(/(ABC|A)+)*)\s*/i

匹配A / ABC

使用反向引用,我试图通过将其重写为

来简化它
/\s*((ABC|A)(/\2+)*)\s*/i

但这似乎只与A / A匹配

为什么我遇到这种行为,我可以在这里使用反向引用来简化RegEx吗? (我在http://www.regexr.com/

在线测试

1 个答案:

答案 0 :(得分:0)

发生这种情况的原因是因为您拥有的新正则表达式只会A/AA/AAA/AAA,(在/之后的任意数量的A' s) 。 (从技术上讲,它也会匹配ABC/ABCABC/ABCABC

*捕获组与(/\2+)捕获组的任意数量匹配后的(/\2+)。因此,除非您不关心A/A之后的内容(即A/AFOO),否则您可以执行与/\s*((ABC|A)(/\2+).*)\s*/i匹配的A/A(whatever here),({{1} },A/ABCA/ADC

否则,我建议坚持使用原始正则表达式。