JS正则提取URL中斜杠之间的值?
大佬们,如何用js正则匹配,得出每个“/”中间的值
let pattern = "{note}/:pakid:/corrinsdetail/{corrInsAleid}/{corrInsPakId}/{corrInsInsta}/{corrInsVernr}/{verFrom}/{verTo}/{name}/:tab:";
let url = "0001668882/41/corrinsdetail/0001023444/41/0020751259/0005/756/756/SAP_BASIS/ValidityDetails";
输入上述数据,期望得到结果
{
note: "0001668882",
pakid: "41",
corrInsAleid: "0001023444",
corrInsPakId: "41",
corrInsInsta: "0020751259",
corrInsVernr: "0005",
verFrom: "756",
verTo: "756",
name: "SAP_BASIS",
tab: "ValidityDetails"
}
回复
1个回答

test
2024-06-19
代码代码显得有点长,为了兼容异常情况,
- 检验url是否符合pattern,
- url如果含有参数
?zz=23423
或者#abc
,需要清洗 url中如果含有
-
也要兼容,不仅仅是_
和数字、字母let pattern = "{note}/:pakid:/corrinsdetail/{corrInsAleid}/{corrInsPakId}/{corrInsInsta}/{corrInsVernr}/{verFrom}/{verTo}/{name}/:tab:"; let url = "0001668882/41/corrinsdetail/0001023444/41/0020751259/0005/756/756/SAP_BASIS/ValidityDetails"; function extractInfo(pattern, url) { const urlRegex = new RegExp(pattern.replace(/(\{|:)[\w-]+(\}|:)/g, "\[\\w-]+").replace(/\//g, "\/")); if(!urlRegex.test(url)) { throw new Error("输入的Url不符合Pattern"); } let keys = pattern.split("/"); let values = url.replace(/(\?|#).*/, "").split("/"); let result = {}; keys.forEach((v,i)=>{ if(/(\{|:)\w+(\}|:)/.test(v)) { result[v.replace(/(\{|:|\})/g,"")] = values[i]; } }) return result; } console.log(extractInfo(pattern, url));
输出结果
回复

适合作为回答的
- 经过验证的有效解决办法
- 自己的经验指引,对解决问题有帮助
- 遵循 Markdown 语法排版,代码语义正确
不该作为回答的
- 询问内容细节或回复楼层
- 与题目无关的内容
- “赞”“顶”“同问”“看手册”“解决了没”等毫无意义的内容