我需要构建一个路由器,将 REST 请求路由到正确的控制器和操作。这里有一些例子:
POST /users
GET /users/:uid
GET /users/search&q=lol
GET /users
GET /users/:uid/pictures
GET /users/:uid/pictures/:pid
拥有一个尽可能好的正则表达式非常重要,因为路由是必不可少的并且会在每个请求时完成。
我们首先必须用正则表达式替换 url 中的 : (until end 或直到下一个正斜杠 /),之后我们可以用它来通过请求 url 验证 url。
我们如何用正则表达式替换这些动态路由?就像搜索以“:”开头并以“/”结尾的字符串、字符串结尾或“&”一样。
这是我尝试过的:
var fixedUrl = new RegExp(url.replace(/\\\:[a-zA-Z0-9\_\-]+/g, '([a-zA-Z0-0\-\_]+)'));
由于某种原因它不起作用。我如何实现一个正则表达式,用正则表达式替换 :id ,或者在与真实请求 url 进行比较时忽略它们。
感谢帮助
I'd use :[^\s/]+
用于匹配以冒号开头的参数(匹配:
,然后尽可能多的字符,除了/
和空白)。
作为替代品,我正在使用([\\w-]+)
匹配任何字母数字字符,-
and _
,在捕获组中,假设您也有兴趣使用匹配的参数。
var route = "/users/:uid/pictures";
var routeMatcher = new RegExp(route.replace(/:[^\s/]+/g, '([\\w-]+)'));
var url = "/users/1024/pictures";
console.log(url.match(routeMatcher))
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)