为什么 Regex 不给出最长匹配?

问题描述

我对 a(boy)?(boycott)? 进行了正则表达式 aboycott 测试。

const result = "aboycott".match(/a(boy)?(boycott)?/);

console.log(result[0]);

我的思考过程

  • aa 匹配
  • bb 匹配
  • oo 匹配
  • yy 匹配
  • cb
  • 不匹配

因为 (boy) 是可选的,所以它的状态被保存,REGEX 引擎可以回溯尝试保存的状态

  • bb 匹配
  • oo 匹配
  • yy 匹配
  • cc 匹配
  • oo 匹配
  • tt 匹配
  • tt 匹配

最终匹配应该是 aboycott 但它匹配 aboy。这里发生了什么?如果我没猜错,? 是贪婪的,它首先尝试匹配并保存状态。如果没有匹配项,则返回到保存的位置。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)