第 4 课

捕获组与替换

分组、反向引用与替换模板。

捕获组 让正则「记住」匹配的一部分,从而支持提取、校验拆分与结构化查找替换。

编号分组

圆括号按从左到右产生编号:

模式:(\d{4})-(\d{2})-(\d{2}) 作用于 2026-05-28

$1 / \12026
$205
$328

在 JavaScript 替换回调中,match[1]match[2] 等含义相同。

非捕获组

只需分组、不需捕获时用 (?: ... )

(?:https?):// 把 scheme 分支分组,但不占用 $1

后续增加可选前缀时,替换模板更稳定。

反向引用

模式内的 \1 引用第 1 组已匹配内容。经典例子:(['"]).*?\1 匹配首尾引号一致的字符串。

反向引用很强,也易在嵌套结构上误用——这也是不应单独用正则解析 HTML 的原因之一。

替换模板

编辑器与语言在替换串中使用 $1$2$&(整段匹配):

  • user_id=123 改成 userId: 123
  • DD/MM/YYYY 重排为 YYYY-MM-DD

务必在 多行 上预览替换,包括空字段与异常空格。

命名分组(现代 JavaScript)

(?<year>\d{4}) 可通过 match.groups.year 访问。长模式中命名分组更易读。

要点

让每个捕获对应 一个语义字段。若替换串需要十个 $n,考虑简化模式或改用解析器。

想动手练习时,可使用 DevCove 相关工具——可选,不属于本课正文。

打开相关工具

返回课程概览