跳转到主要内容
模块 4 · 第 4 课(共 4)课程中的16/32~12 min
模块课程(4/4)

命名组和反向引用

当组数量增加时,请记住 $2 是“月份”,$5 是“月份” 是“年”变得脆弱。 (?<name>...) 语法允许您 命名一个组:您可以通过 groups.name 按名称访问它(并且在 替换为 $<name>)。

Code
Pattern: (?<anno>\d{4})-(?<mese>\d{2})-(?<giorno>\d{2})
Sample:  2024-03-15
Gruppi:
  anno    = "2024"
  mese    = "03"
  giorno  = "15"

编辑器会在比赛旁边显示已命名的组。

反向引用

反向引用允许您在同一模式内, 到之前的捕获。语法:

  • \1, \2, … -- 编号参考(到组 1、2、…)。
  • \k<name> -- 命名引用。
Code
Pattern: \b(\w+)\s+\1\b
Sample:  un test un test il il gatto
                                ^^^^^

它匹配 连续的重复单词: (\w+) 捕获一个单词,然后 \s+\1 需要一个空格和 相同 单词。

自记录代码和命名反向引用

命名组提高了 JavaScript 代码的可读性:您访问 match.groups.name,而不是引用 match[1]。在模式本身内部,引用它们是使用 \\k<name> 语法完成的。

尝试一下

锻炼#regex.m4.l4.e1
尝试:0加载中...

以 YYYY-MM-DD 格式查找每个日期,并将其命名为“anno”、“mese”、“giorno”组。

正在加载编辑器...
显示提示

语法:(?&lt;名称&gt;模式)。匹配显示“命名”条目下的组。

3 次尝试后可用的解决方案

复习练习

锻炼#regex.m4.l4.e2
尝试:0加载中...

查找连续的重复单词(例如“il il”、“casa casa”)。对第一个使用组,对第二个使用反向引用“\\1”。

正在加载编辑器...
显示提示

\\b(\\w+)\\s+\\1\\b:第一个单词是 (\\w+),然后是一个空格,然后是相同的单词 \\1。

3 次尝试后可用的解决方案

额外的挑战

锻炼#regex.m4.l4.e3
尝试:0加载中...

Find HTML/XML tag pairs (e.g. `<b>text</b>` or `<i>text</i>`) ensuring that the closing tag matches the opening tag using a named backreference.

正在加载编辑器...
显示提示

指定名称 (?<tag>\\w+) 并以 \\k<tag> 结束。

3 次尝试后可用的解决方案