【问题标题】:Cannot find a match for a positive lookforward (?=pattern) example in regex无法在正则表达式中找到与正前瞻 (?=pattern) 示例匹配的匹配项
【发布时间】:2020-09-25 06:59:11
【问题描述】:

当我在学习正则表达式的断言时,我的朋友给了我一个模式 /one(?=two)three/ 让我找到与其匹配的有效字符串。但是,似乎不可能找到这样的字符串。 “onetwothree”无效。我试图解释(?=xxx) 没有实际字符,所以这个模式没有匹配。但这仍然有点令人困惑。希望有人可以彻底验证。 :-)

【问题讨论】:

  • 匹配一=二>三,你需要括号而不是
  • 固定的正则表达式是不可能的,因为它不能同时匹配两个和三个。使用 regex101.com 可让您测试正则表达式并详细解释匹配项
  • 网站救了我! thx@user120242

标签: javascript regex regex-lookarounds


【解决方案1】:

我建议使用网站https://regex101.com,它允许播放和测试您的正则表达式,并为您提供有关正则表达式如何运行的非常详细的解释。

您的正则表达式总是会失败,因为不可能同时匹配两个和三个。
您可以在这个正则表达式调试器的屏幕截图中看到,在它测试“二”的正向前瞻之后,它从二的开头位置再次开始匹配并尝试匹配三,但失败了。

通过 regex101 调试器显示的正则表达式匹配的动画记录:

【讨论】:

    【解决方案2】:

    抽象:正则表达式是真的

    onethree
       ^
    (?=two)
    

    ^ 指向插入(?=two) 作为支票的位置。
    向前看是three,所以它永远不是two
    并且整个正则表达式将始终失败

    将正则表达式更改为 one(?=two).*?three 将匹配 onetwothree

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-11-15
      • 2020-04-15
      • 2023-02-24
      • 1970-01-01
      相关资源
      最近更新 更多