什么是 Backreference?
在正则表达式中,Backreference(反向引用) 是指在模式中引用之前捕获组(capturing group)所匹配的内容。
它通常写作 \1、\2 等,其中数字代表第几个括号捕获组。
例如,正则 /(\w+)\s+\1/ 可以匹配连续出现两次的相同单词(如 "hello hello")。
基本语法
(...):定义一个捕获组。\1:引用第一个捕获组匹配的内容。\2:引用第二个捕获组,依此类推。- 在替换字符串中(如 JavaScript 的
replace()),也使用$1、$2引用。
JavaScript 示例
// 匹配重复单词
const str = "This is is a test.";
const regex = /\b(\w+)\s+\1\b/g;
console.log(str.replace(regex, '$1')); // "This is a test."
// 验证对称结构(如回文数字)
const num = "12321";
const palindromeRegex = /^(\d)(\d)\d\2\1$/;
console.log(palindromeRegex.test(num)); // true
常见用途
- 查找重复内容(如重复单词、标签不闭合等)
- 提取成对结构(如引号内的内容、HTML 标签)
- 数据清洗与格式标准化
- 验证具有对称或重复模式的字符串
注意事项
- 反向引用引用的是“实际匹配的文本”,而非正则子模式。
- 捕获组从左到右编号,嵌套时按开括号顺序计数。
- 非捕获组 (?:...) 不参与编号,也不会被反向引用。