本文主要分享用于匹配url的正则表达式工具库path-to-regexp在实际项目中的一个使用场景
首先它能做什么?
- 它可以通过url生成用于匹配该格式的地址的正则表达式,也可以通过指定的正则表达式来匹配给定的url;
- 解析url中的参数;
- 填充参数值等;
场景:
前端路由表中有路径参数的路由,像这样的:xxx/sss/:id, 这里的id并不是确定的,所以当我们在浏览器地址栏中输入xxx/sss/123这样的地址,此时可能需要选中某个菜单节点、构造面包屑导航层级等。
那么就可以使用path-to-regexp将xxx/sss/:id转成一个正则表达式,通过这个正则表达式去本地路由表中匹配对应的路由信息。
我曾经参与过一个项目,当初为了避免在每个页面中都去书写面包屑组件,且能自动处理顶部菜单的选中,希望通过一个统一的逻辑,依据浏览器地址栏的路由信息,自动匹配生成面包屑,后端返回的接口是有一个字段id和pid层级关系的菜单列表,我们的方案是监听了路由变化来处理,对于不带参数的路由我们可以直接拿到地址栏的pathname去本地路由表中匹配倒和它一致的路由,并且确定它的id是什么,一层一层向上查找它的父菜单来确定菜单的选中效果,并构造面包屑导航。
但是对于xxx/sss/123这样的路由,即使拿到pathname,也没法去本地路由表中匹配,后来我们整体的解决方案就是通过pathToRegexp将路由表中的路由转为路由则表达式,逐个去匹配当前地址栏中获得的pathname,来确定他的id,依据id向上查找pid,完成对菜单状态、面包屑的处理。
因为今天又碰到一个小伙伴遇到了类似的场景,遂记录一个笔记。觉得有用的老铁们记得点个赞哦~