首页 > 解决方案 > 当其中存在负前瞻时捕获组

问题描述

我想捕获一个组,但只有当指定的字符串不在其中时(2 个选项)。

这是我的位置:/src=\"([^"](?!js|pdf))*\"/

这就是我要的:

<img src="/Storage/shot.png"/>  
=>  /Storage/shot.png

<script src="/whatever/file.js">  
=>  (Nothing here)

但在实践中,我只捕获了该组的最后一封信。我该如何解决?

在这里看到它:https ://regex101.com/r/M9szpw/2

标签: regex

解决方案


您的([^"](?!js|pdf))*模式中的 是一个重复的捕获组"它匹配除(with )之外的单个字符,该字符[^"]不是紧跟jsor pdf(参见(?!js|pdf)前瞻),并且每次在组内存缓冲区中重写组值时捕获零个或多个这些字符。

您可以使用

src="(?![^"]*(?:js|pdf)")([^"]*)"

查看正则表达式演示

细节

  • src="- 文字src="字符串
  • (?![^"]*(?:js|pdf)")- 如果紧挨当前位置的右侧有 0+ 个字符,则匹配"失败jspdf"
  • ([^"]*)- 第 1 组:任何 0+ 个字符,除了"
  • " - 一个"字符。

推荐阅读