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

JavaScript正则匹配URL末尾恰好2次右括号的实现问题

JavaScript URL正则匹配末尾恰好2个右括号的解决方案

最终可用正则

/(?<![a-zA-Z/]+)(https?:)?\/{1,2}[a-zA-Z][^:"'\);,\s]*(?:\){2}(?!\))?/g

原正则问题根源

你之前使用的\S*是贪婪匹配规则,会无差别吃掉所有连续的右括号,后置的肯定环视仅校验了末尾存在2个右括号,无法限制右括号的总数量不超过2,因此出现3个及以上右括号时会全部纳入匹配结果。

正则逻辑说明

  1. 开头部分(?<![a-zA-Z/]+)(https?:)?\/{1,2}[a-zA-Z]保留了你的原有逻辑,用于匹配URL的协议和开头域名部分
  2. 中间部分[^:"'\);,\s]*匹配所有非终止符(你原规则里的:"';,)、非右括号、非空白的URL主体内容,不会提前吃掉末尾的右括号
  3. 末尾可选非捕获组(?:\){2}(?!\))?用于判断右括号数量:
    • \){2}匹配连续2个右括号
    • 后置否定环视(?!\))保证这2个右括号之后不会出现第三个右括号,严格限制数量为恰好2个
    • 不满足该条件时不会匹配任何末尾的右括号,符合1个或3个及以上右括号时不纳入匹配的要求

测试验证

和你给出的预期结果完全匹配:

  • 输入末尾带1个右括号的URL:匹配到最后一个非右括号字符,不会包含末尾的1个右括号
  • 输入末尾带2个右括号的URL:完整匹配包含末尾2个右括号的全URL
  • 输入末尾带3个及以上右括号的URL:匹配到最后一个非右括号字符,不会包含任何末尾的右括号

该正则无需使用^/$锚点,可直接在全局复杂文本中提取符合要求的URL,适配你的使用场景。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.23 23:45:09