正则表达式分组子表达式

基于 ECMAScript 正则表达式语法

一对括号就是一个分组。\1 引用第一个分组所匹配到的内容,\2、\3 等同理。

示例:(a+)b\1 匹配 aabacaabaa

可匹配到两处:aba 和 aabaa。

第一次匹配

  1. 位置 0:(a+) 贪婪匹配 aa(位置 0–1),b 匹配位置 2 成功,\1 需要 aa 但位置 3–4 是 ac,失败。回溯 (a+) 为 a(位置 0),b 在位置 1 是 a,失败。
  2. 位置 1:(a+) 匹配 a(位置 1),b 匹配位置 2 成功,\1 需要 a,位置 3 是 a,匹配成功。
  3. 匹配结果为 aba(位置 1–3),分组 1 捕获 a。

第二次匹配

  1. 位置 4:字符 c 不符合 a+,跳过。
  2. 位置 5:(a+) 匹配 aa(位置 5–6),b 匹配位置 7 成功,\1 需要 aa,位置 8–9 是 aa,匹配成功。
  3. 匹配结果为 aabaa(位置 5–9),分组 1 捕获 aa。