捕获组在替换中通过编号或命名引用,JavaScript/Sublime用$1、$2,Vim用\1、\2,支持命名组的环境用$name;需注意编号顺序、转义规则及全局替换标志。

捕获组在替换字符串中通过特定语法引用,不同工具环境写法略有差异,但核心逻辑一致:括号定义组、编号或命名后,在替换部分用对应符号调用。
JavaScript 和 Sublime Text:用 $1、$2 引用
在 JS 的 replace() 或 Sublime Text 的正则替换框中,捕获组按左括号顺序编号,从 1 开始。替换时直接写 $1、$2 即可插入对应内容。
-
"2023-04-15".replace(/(\d{4})-(\d{2})-(\d{2})/, "$2/$3/$1")→"04/15/2023" -
"张三, 李四".replace(/(\w+),\s*(\w+)/, "$2 $1")→"李四 张三" - 想输出字面量
$1,需写成$$1
Vim:用 \1、\2 引用(注意转义)
Vim 默认使用基本正则(BRE),括号和花括号需加反斜杠转义,引用时用 \1、\2。
:%s/\(\d\{4\}\)-\(\d\{2\}\)-\(\d\{2\}\)/\2\/\3\/\1/g- 启用
very magic模式可简化::%s/\v(\d{4})-(\d{2})-(\d{2})/\2\/\3\/\1/g - 不加
g修饰符只替换每行第一个匹配项
支持命名捕获组的环境(如 Sublime、Python、.NET)
用 (?P<name>...) 定义命名组,替换时用 $name 或 ${name},可读性更强。
(?P<year>\d{4})-(?P<month>\d{2})-(?P<day>\d{2})- 替换为
$month/$day/$year,逻辑清晰不易出错 - 嵌套时编号仍按左括号顺序,命名组不受嵌套影响
引用时的常见细节
引用不是万能的,几个关键点容易忽略:
- 引用超出范围(如只有两组却写
$5),多数环境会原样保留$5字符串 - 全局替换必须加
g(JS)、g标志(Vim)或勾选“全部”选项(Sublime) -
$&表示整个匹配内容,$`和$'分别表示匹配前/后文本,适用于上下文保留场景

















