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" }

阅读量:195

点赞量:0

问AI
代码 代码显得有点长,为了兼容异常情况, 1. 检验url是否符合pattern, 2. url如果含有参数 "?zz=23423" 或者 "#abc",需要清洗 3. 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)); 输出结果 "image.png" (https://wmprod.oss-cn-shanghai.aliyuncs.com/c/user/20240929/8ff8429abad0e914240067449722a71e.png)