javascript - 正则表达式中的前向引用
问题描述
以下正则表达式有什么区别?
(\2amigo|(go!))+
(amigo|(go!))+
它们都匹配相同的字符串。 https://regexr.com/3u62t
前向参考是如何工作的?
解决方案
它实际上根本不起作用(尽管正如 Wiktor Stribiżew 指出的那样,它可以与其他正则表达式风格一起使用)。
当\n
引用一个没有捕获任何东西的捕获组时,它匹配空字符串。您可以在 eg 中看到这一点/(a)?b\1/
,它与b
.
当\n
指的是模式中稍后出现的捕获组时,它通常还不能捕获任何东西。您可以在 eg 中看到这一点/\1b(a)/
,它与ba
.
您可能会认为在重复中,先前的捕获被保留,因此/(\2a(b))*/
会 match abbab
,但这不是它的工作方式:在重复中,当新的匹配开始时,捕获被重置。所以相反,它匹配abab
,不 abbab
匹配。
因此,前向引用完全没有用处,并且只匹配空字符串。你的两种模式没有区别。
推荐阅读
- android - 限制 Android Studio 在 Work Profile 中安装
- google-chrome-extension - 后台脚本中的 storage.sync 未保存
- slider - “滑块”不包含“值”的定义
- ios - 有没有办法在 UITableView 中的条件后不返回单元格?
- flutter - 更改焦点时 TextFormField 失去价值
- c++ - 如何修复失败的构建而没有错误
- excel - 在第一次出现时跳过 if 语句的真实值
- ios - 在闪烁按钮上,它进入浅色阴影
- mysql - MySQL 在 3 个服务器上的行为不同,相同的版本
- java - 如何在每一轮中多次散列并连接一个字符串