js 正则中的$0,1,2,3 是怎么用的
在正则表达式中,$0
、$1
、$2
、$3
等是反向引用(backreference),主要用于替换操作中引用正则匹配到的分组内容。以下是具体用法和示例:
1. 基本概念
$0
:代表正则表达式完整匹配的整个文本(即匹配到的全部内容)。例如,正则/(\d+)-(\d+)/
匹配"123-456"
时,$0
就是"123-456"
。$1
、$2
、$3
:分别引用第1、2、3个**捕获组(用小括号()
包裹的部分)**的内容。例如:- 正则
/(\d+)-(\d+)/
匹配"123-456"
时:$1
="123"
(第一个分组)$2
="456"
(第二个分组)。
- 正则
2. 常见用途
(1)字符串替换
在替换操作中,通过 $n
引用分组内容,重新排列或修改字符串:
- 示例1(交换日期格式):
"2025-04-29".replace(/(\d{4})-(\d{2})-(\d{2})/, "$2/$3/$1"); // 结果:"04/29/2025"($1=2025,$2=04,$3=29)
- 示例2(Markdown链接转HTML):
"[百度](http://baidu.com)".replace(/\[(.*?)\]\((.*?)\)/, '<a href="$2">$1</a>'); // 结果:'<a href="http://baidu.com">百度</a>'
(2)动态生成内容
结合函数使用,实现更复杂的逻辑:
"123".replace(/(\d)/g, (match, p1) => `数字${p1}`);
// 结果:"数字1数字2数字3"(p1即$1,代表每个分组匹配的单个数字)
3. 不同语言中的差异
- JavaScript/Java/Python:使用
$n
在替换字符串中引用分组(如"$1"
)。 - 正则表达式内部:若需在正则中反向引用分组,需用
\1
、\2
等(如/(\d)\1/
匹配重复数字"11"
)。 $0
的特殊性:部分语言(如JavaScript)的替换函数中,$0
可直接使用,但某些语言(如Java)可能需要通过matcher.group(0)
获取。
4. 实际应用场景
- 格式化文本:如日期、电话号码的重新排列。
- 模板渲染:替换占位符(如
{{name}}
替换为实际值)。 - 数据清洗:提取或重组字符串中的特定部分(如URL处理)。
总结
$0
:整个匹配结果。$1
、$2
…:按顺序对应正则中的捕获组。- 灵活运用这些引用可以简化复杂的字符串操作,尤其在替换和模板生成中非常高效。