You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在同一正则表达式中从srcset捕获组提取全部URL?

解决思路

你之前的表达式只能提取单个URL,核心原因是多数正则引擎中,重复嵌套的捕获组只会保留最后一次匹配的结果,哪怕你写了((http[^\s]+).*?)+,最终捕获组里也只会留下最后一个URL。

要把两个操作合并到单个正则里提取所有URL,分两种常用场景处理:

场景1:支持正向预查+全局匹配的正则引擎(如PCRE、Python re、JavaScript)

直接用这个正则,配合全局匹配模式即可:

(?i)(?<=srcset=&quot;|,\s*)http[^\s]+

逻辑说明:

  • (?i):忽略大小写匹配
  • (?<=srcset=&quot;|,\s*):正向预查定位,匹配srcset=&quot;或者, (逗号加空格)之后的位置,确保每个URL的起始点都能被命中
  • http[^\s]+:匹配从http开头到第一个空白字符的完整内容,也就是目标URL

用全局匹配(比如Python的re.findall()、JavaScript的/regex/g)测试你提供的源码,会直接得到所有URL:

https://www.thesite.nl/wp-content/uploads/2016/02/logo-home.png
https://www.thesite.nl/wp-content/uploads/2016/02/logo-home-300x201.png
https://www.thesite.nl/wp-content/uploads/2016/02/logo-home-768x514.png
https://www.thesite.nl/wp-content/uploads/2016/02/logo-home-700x469.png

场景2:依赖捕获组+多次匹配的老旧正则引擎

如果必须通过捕获组提取,用这个表达式重复执行匹配直到无结果:

(?i)(?:srcset=&quot;|,\s*)(http[^\s]+)

逻辑说明:

  • (?:...):非捕获组,仅用来匹配URL的前置触发条件(srcset开头或逗号分隔符)
  • (http[^\s]+):捕获单个目标URL
    每次匹配会提取一个URL,重复执行就能拿到所有结果。

内容的提问来源于stack exchange,提问作者Thomas

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.05 00:10:36