代码之家  ›  专栏  ›  技术社区  ›  garson

只匹配我只知道一部分的正则表达式的最后一个实例

  •  1
  • garson  · 技术社区  · 2 年前

    我只想匹配正则表达式的最后一个实例。例如,在此字符串中:

    这里有些文字 foo单词栏 和 foo字foo字 foo单词栏 此处有更多文本

    我试图只匹配粗体部分。以下是我目前尝试的内容:

     /foo?.+?bar/gi
    

    然而,它保留了所有斜体部分。我做错了什么?

    1 回复  |  直到 2 年前
        1
  •  0
  •   anubhava    2 年前

    您可以使用此正则表达式来匹配关闭 foo...bar 配对,不允许任何 foo 或 bar 在中间

    foo(?:(?!foo|bar).)+bar(?!.*foo.+bar)
    

    RegEx Demo 1

    RegEx详细信息:

    • foo 火柴 foo
    • (?:(?!foo|bar).)+ :匹配任意字符的1+,只要它后面不是 foo 或 酒吧 .
    • 酒吧 火柴 酒吧
    • (?!.*foo.+bar) :确保我们没有 foo..bar RHS上的匹配

    如果您可以在捕获组中获得匹配项,那么可以考虑使用此更高效的regex版本:

    .*(foo(?:(?!foo|bar).)+bar)
    

    RegEx Demo 2