JS正则提取URL中斜杠之间的值?

作者站长头像
站长
· 阅读数 26

大佬们,如何用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个回答
avatar
test
2024-06-19

代码代码显得有点长,为了兼容异常情况,

  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));

输出结果answer image

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