正则分组子表达式
基于 ECMAScript 正则表达式语法
一对括号就是一对分组,废话不多说,直接看例子。
分组引用
对 aabacaabaa 匹配 (a+)b\1,可以匹配到的地方有两处 aba 和 aabaa。
其中 \1 指第一个分组所匹配到的东西。匹配过程如下。
- 从位置 0 开始,
(a+)贪婪匹配aa(位置 0-1),然后匹配b(位置 2)成功,但\1需要匹配aa,而位置 3-4 是ac,匹配失败。 - 回溯后,
(a+)匹配a(位置 0),然后匹配b,但位置 1 是a,匹配失败。 - 从位置 1 开始,
(a+)匹配a(位置 1),然后匹配b(位置 2)成功,\1需要匹配a,位置 3 是a,匹配成功。 - 第一次匹配完成,匹配结果为
aba(位置 1-3),分组 1 捕获a。 - 从位置 4 开始,字符
c不符合a+,跳过。 - 从位置 5 开始,
(a+)匹配aa(位置 5-6),然后匹配b(位置 7)成功,\1需要匹配aa,位置 8-9 是aa,匹配成功。 - 第二次匹配完成,匹配结果为
aabaa(位置 5-9),分组 1 捕获aa。
如果一个正则有多个分组 \2 \3 等同理。