首页 > 解决方案 > 正则表达式中的前向引用

问题描述

以下正则表达式有什么区别?

(\2amigo|(go!))+
(amigo|(go!))+

它们都匹配相同的字符串。 https://regexr.com/3u62t

前向参考是如何工作的?

标签: javascriptregexforward-reference

解决方案


它实际上根本不起作用(尽管正如 Wiktor Stribiżew 指出的那样,它可以与其他正则表达式风格一起使用)。

\n引用一个没有捕获任何东西的捕获组时,它匹配空字符串。您可以在 eg 中看到这一点/(a)?b\1/,它与b.

\n指的是模式中稍后出现的捕获组时,它通常还不能捕获任何东西。您可以在 eg 中看到这一点/\1b(a)/,它与ba.

您可能会认为在重复中,先前的捕获被保留,因此/(\2a(b))*/会 match abbab,但这不是它的工作方式:在重复中,当新的匹配开始时,捕获被重置。所以相反,它匹配abab abbab匹配。

因此,前向引用完全没有用处,并且只匹配空字符串。你的两种模式没有区别。


推荐阅读