如何用JavaScript正则实现路径匹配中可选右侧部分的贪婪匹配
解决方案
你的问题出在正则开头的.*\/是贪婪匹配,会直接匹配到路径中最后一个/,导致A分组被错误赋值为最后一段数字。调整方案如下:
修正后的正则表达式
如果B分组仅需匹配数字:
const regex = /^\/(?<A>\d+)(\/(?<B>\d+))?$/;
如果B分组需要匹配任意字符(除换行外):
const regex = /^\/(?<A>\d+)(\/(?<B>.+))?$/;
验证结果
- 匹配
/1234/5678:regex.exec("/1234/5678").groups; // { A: '1234', B: '5678' } - 匹配
/1234:regex.exec("/1234").groups; // { A: '1234', B: undefined }
关键调整说明
- 去掉了原正则中贪婪的
.*\/,改用^\/从路径开头精确匹配,确保第一个/后的内容直接进入A分组。 - 将原
B分组内的非贪婪匹配.+?改为贪婪匹配.+(或针对数字的\d+),这样当路径存在/xxx后缀时,会优先完整匹配该部分作为B分组;当后缀不存在时,B分组自然为undefined。
内容的提问来源于stack exchange,提问作者Jim
相关产品推荐
相关产品推荐

