正则分组子表达式

基于 ECMAScript 正则表达式语法

一对括号就是一对分组,废话不多说,直接看例子。

分组引用

aabacaabaa 匹配 (a+)b\1,可以匹配到的地方有两处 abaaabaa

其中 \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 等同理。