正则表达式不严格遵循负面前瞻?

Regex not strictly following negative lookahead?

我有一个匹配 url 的正则表达式,它在末尾没有 引号(双引号或单引号) 有 & url.

中的(& 符号)

我制作的正则表达式

([^'` "\n]+)\.([^ \n]+)&([^ "`'\n]+)(?!["'])

但它只是不接受最后一个词并匹配 url

https://regex101.com/r/vpmqZH/1

以上图为例

google.com/cool?cool1=yes&cool2=no&cool3=no"

url 不应该匹配,因为它最后有 "

但它只是不匹配 'o' 并匹配剩余的 url.

我想做的是,如果这个双引号最后出现,那么就不要匹配整个 url。

您需要在 & 符号后的整个部分启用前瞻。然后我们可以选择

  • $行尾
  • (?=\s) space.
  • 的正面前瞻
([^' "\n]+)\.([^ \n]+)&((?!["'])[^ "'\n])+($|(?=\s)

https://regex101.com/r/6ZGpSX/1

仅对于匹配,您可以省略捕获组,并使用否定字符 class,如果需要,您应该省略否定字符 class 中的反引号 `允许匹配它。

[^'"\s.]+\.[^\s'"&]+&[^\s"']+(?!\S)

说明

  • [^'"\s.]+ 匹配除 " ' .
  • 以外的 1+ 个非空白字符
  • \.匹配一个点
  • [^\s'"&]+ 匹配除 " ' &
  • 以外的 1+ 个非空白字符
  • &字面匹配
  • [^\s"']+ 匹配除 " '
  • 以外的 1+ 个非空白字符
  • (?!\S) 断言右边的空白边界

看到一个regex demo.