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

Golang正则如何添加if条件 实现分组存在时匹配对应分隔符

正则路径条件匹配实现方案

需求说明

  • 实现条件匹配逻辑:当路径中存在public/分组时,匹配内容截止到文件名前的下划线_位置;当该分组不存在时,匹配内容截止到最后一级目录的斜杠/位置。
  • 现存问题:使用?=()正向预查语法实现if-else判断时,在线正则编辑器兼容性差无法正常识别,原有正则对非public路径的提取结果不符合预期。

测试用例对照

  • 用例1(含/public/前缀)
    • 原字符串:/public/weltweit/nfsk/2022/05/18/668e9f57-30be-40b6-bc85-5bf66671e41d/668e9f57-30be-40b6-bc85-5bf66671e41d_AVC-270.mp4
    • 原有正则:^\/(\bpublic\b[\/])*(.+[a-z]{1,}.*[\/|_]+)+.*?$
    • 匹配输出:weltweit/nfsk/2022/05/18/668e9f57-30be-40b6-bc85-5bf66671e41d/668e9f57-30be-40b6-bc85-5bf66671e41d_,结果符合预期
  • 用例2(不含/public/前缀)
    • 原字符串:/medp/ondemand/weltweit/fsk0/258/2580407/2580407_40256616.mp4
    • 原有正则匹配输出:medp/ondemand/weltweit/fsk0/258/2580407/2580407_,结果不符合预期
    • 预期输出:medp/ondemand/weltweit/fsk0/258/2580407/

实现方案

放弃依赖低兼容性的正则内置条件判断语法(如(?(condition)then|else)结构、嵌套预查实现的if逻辑),利用正则分支|的顺序优先匹配特性实现分支逻辑,兼容绝大多数在线编辑器、编程语言内置正则引擎:

  1. 参考正则表达式
^/public/(.+?_)|/(?!public/)(.+/)
  1. 规则拆解
    • 第一个分支优先匹配:识别以/public/开头的路径,贪婪捕获后续所有内容直到最后一个下划线_,满足public路径的匹配要求
    • 第二个分支兜底匹配:通过负向预查排除/public/开头的路径,贪婪捕获后续所有内容直到最后一个斜杠/,满足非public路径的匹配要求
    • 结果提取:取两个捕获组中第一个非空的内容即可,无需额外代码判断分支
  2. 验证结果
    • 用例1捕获组1返回:weltweit/nfsk/2022/05/18/668e9f57-30be-40b6-bc85-5bf66671e41d/668e9f57-30be-40b6-bc85-5bf66671e41d_,符合预期
    • 用例2捕获组2返回:medp/ondemand/weltweit/fsk0/258/2580407/,符合预期

适配提示:如果使用的正则引擎不支持负向预查,可直接通过匹配顺序实现逻辑:优先匹配^/public/开头的字符串应用下划线终止规则,剩余所有字符串默认应用斜杠终止规则即可,无需额外做前缀排除。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 15:27:17