Javascript 匹配react路由器路径声明的正则表达式

Javascript 匹配react路由器路径声明的正则表达式,javascript,node.js,reactjs,react-router,react-router-dom,Javascript,Node.js,Reactjs,React Router,React Router Dom,我有一张以react路由器路径为键的路线图,例如: const路由=[ { 页面:“我的设置”, 标签:“pages.mySettings”, 路径:“/professionels/mes reglages.html”, 确切地说:是的 }, { 页面:“查看用户”, 标签:“pages.viewUser”, 路径:“/users/:id/view.html”, 确切地说:是的 } ]; 我希望从使用useHistory().location.pathname检索到的位置匹配所有与react路

我有一张以react路由器路径为键的路线图,例如:

const路由=[
{
页面:“我的设置”,
标签:“pages.mySettings”,
路径:“/professionels/mes reglages.html”,
确切地说:是的
},
{
页面:“查看用户”,
标签:“pages.viewUser”,
路径:“/users/:id/view.html”,
确切地说:是的
}
];
我希望从使用
useHistory().location.pathname
检索到的位置匹配所有与react路由器术语中的键匹配的路径,例如:

  • (路径名)=>get(routeMap,“/professionels/mes reglages.html”)
    =>应该匹配
    routeMap.get(“/professionels/mes reglages.html”)
  • (路径名)=>get(routeMap,“/users/11/view.html”)
    =>应该匹配
    routeMap.get('/users/:id/view.html')
以及所有反应路由器路径,因此这也应该起作用:

  • (路径名)=>get(routemap,“/users/11/settings/10/items/24/view.html”)
    =>应该匹配
    routemap.get('/users/:userId/settings/:settingId/items/:id/view.html')
我从这里开始,你知道如何用regexp实现吗


根据您的评论,我稍微调整了代码,并为您的查找编写了一个说唱函数。 创建URL时必须注意以下规则:

  • 最后一个id总是被{id}替换
  • 所有其他id都被url部分替换为id,不带复数和“id”(“/users/111”->“/users/{userId}”)
这就是功能:

const getRouteFromPath=(映射,url)=>{
if(url.match(//\/\d+\//g).length>1){
让allowedUrlPart=getAllowedIdQualifier(映射);
让urlParts=url.match(/(?){
如果(!allowedUrlPart.includes(val)){
urlParts=urlParts.slice(urlParts.indexOf(val),1);
}
});
urlParts.forEach((val,key,arr)=>{
如果(键===arr.length-1){

让regex=newregexp(“(?在manu-place中可以工作,但一般来说最后一个是
{id}
miles
/users/10
=>
/users/{id}”
如何包装初始地图对象以保留地图属性,但允许使用更多路径(如计算url)进入地图?此外,还可以使用替换的方式声明所有实体。如果您可以通过检测已注册的占位符并计算此占位符来自动执行此操作,则会更好solution@DimitriKopriwa根据您的评论调整了我的答案。我已经创建了一个代码沙盒,带有补丁
:id
=>它似乎工作正常,但它不是数字防弹的,我期待着获得允许的版本。再次非常感谢