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

JavaScript正则匹配URL:如何排除无关部分捕获指定内容?

解决URL正则捕获的两个需求

刚好碰到过类似的正则捕获问题,针对你给出的URL https://api.example.com/main/user1/collection1/contents/folder1/test.js,我来帮你搞定这两个需求:

1. 仅捕获collection1

你之前用的(?:/user1/)[^/]*之所以会返回包含user1的结果,是因为这个正则的整个匹配内容是/user1/collection1——非捕获组(?:/user1/)只是不会把/user1/作为单独的捕获组,但它仍然是匹配结果的一部分。

这里有两种靠谱的解决方案:

  • 方案一:用正向回顾后发断言直接匹配目标内容
    断言可以帮我们指定“前面必须是某个内容”,但断言本身不会被包含在最终匹配结果里:

    (?<=/user1/)[^/]+
    

    这个正则的逻辑是:匹配前面紧跟着/user1/的、由非斜杠字符组成的字符串,最终匹配结果就是纯纯的collection1。

  • 方案二:用捕获组提取目标内容
    把你需要的部分单独放在捕获组里,之后只提取这个组的内容就行:

    /user1/([^/]+)
    

    此时整个正则会匹配/user1/collection1,但第一个捕获组(对应$1或\1,具体取决于你用的工具)的内容就是collection1,直接取这个组的值就好。

2. 仅捕获folder1/test.js

同理,你之前的contents/(.*)$匹配的是contents/folder1/test.js,整个结果包含了contents/,所以需要把这部分排除掉。

对应的解决方案:

  • 方案一:用正向回顾后发断言
    同样利用断言定位到contents/之后,直接匹配后面的所有内容:

    (?<=contents/).*$
    

    这个正则会匹配contents/之后直到URL结尾的所有内容,结果就是folder1/test.js。

  • 方案二:用捕获组提取
    把目标部分放在捕获组里,提取组内容即可:

    contents/(.*)$
    

    整个正则匹配contents/folder1/test.js,第一个捕获组的内容就是folder1/test.js,直接提取这个组的值就搞定了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 12:04:53