正则表达式捕获可选项目名求助:无法捕获指定分组内容
正则问题排查与修复
原正则失效原因:
\S*是贪婪匹配模式,会直接吞掉整个字符串,后面的可选分组(projects\/(?<project_name>\w+))?根本没机会触发匹配,自然抓不到x。修正后的正则:
^(?:.*projects\/(?<project_name>\w+)|.+)$逻辑说明:
- 用分支匹配
(?:A|B),优先走A分支(匹配含projects的场景),匹配到projects/后,把后面的字母数字串捕获到project_name分组里; - 当字符串里没有
projects时,自动走B分支,直接匹配整个字符串。
- 用分支匹配
测试效果:
- 输入
https://url/projects/x/flow/:project_name分组成功捕获x; - 输入
https://url/any/other/path:整个字符串被完整匹配。
- 输入
内容的提问来源于stack exchange,提问作者Noura
相关产品推荐
相关产品推荐

