代码之家  ›  专栏  ›  技术社区  ›  Daniel Kaplan

如何强制正则表达式尽可能少地获取?

  •  1
  • Daniel Kaplan  · 技术社区  · 6 年前

    <<button (".*?")>>

    我有这个绳子: <<button "A string" "Another string">><</button>>

    一路匹配到 <<button "A string" "Another string">>

    以下是一些我想要的例子:

    << 不匹配

    <<button "A string">><</button>> 匹配

    <<button>><</button>> 不匹配

    我正在使用JavaScript。

    1 回复  |  直到 6 年前
        1
  •  2
  •   6502    6 年前

    问题是贪婪/非贪婪并不影响匹配的部分和不匹配的部分,而只影响匹配部分的长度。 换句话说,你的点 . 如果要使整个表达式匹配,还将咀嚼双引号。

    你需要分析字符串。。。有点像

    <<button ("([^"\\]|\\.)*")>>
    

    意思是

    • "
    • (...)* 零或更多
      • [^"\\] 不是反斜杠或双引号
      • |
      • \\. 反斜杠后跟任何字符
    • 双引号

    "([^"]*)" .