# 课程 A1:反向引用

说明

进阶课程是译者针对 regexone.com (opens new window) 课程中没有涉及的内容所作的补充。

反向引用 (back referencing),或者回溯引用,是指通过 \0\1\2 这样的变量形式来引用模式中已经匹配到的部分。\0 表示整个模式匹配到的文本,\1 表示捕获的第一个组、\2 表示捕获的第二个组,以此类推。

在模式中,嵌套组按照从左到右左括号出现的顺序定义,第一个捕获组是第一个括号里的内容,以此类推。捕获的结果也按照这个顺序排列。见课程 12:嵌套组

回溯引用在替换字符串时十分常用。比如在使用正则表达式搜索文本中的两个数字并交换它们的位置时,可以先使用模式 (\d+)-(\d+) 来搜索,再使用 \2-\1 来替换。下面是 JavaScript 中的代码示例:

"123-456".replace(
  /(\d+)-(\d+)/, // searchValue
  "$2-$1" // replaceValue, $1、$2 等价于上文的 \1、\2
) 
// Output => "456-123"

或者,当我们需要在文本中匹配两个连续的相同单词时,也可以使用反向引用。下面是一段 JS 代码示例,用于删除字符串中的连续的重复单词:

"hello hello world world".replace(
  /(\w+) \1/g, // g 表示全局匹配,即匹配整个字符串中满足该模式的所有子串,而不仅是第一个
  "$1"
)
// Output => "hello world"

请尝试完成下面的练习:

练习 A1:匹配两个连续的相同单词
Task Text Capture Groups Result
capture hello hello world hello hello
解决上述任务以继续下一个问题,或者查看答案