Javascript路由正则表达式

Javascript routing regex

本文关键字:正则表达式 路由 Javascript      更新时间:2023-09-26

我需要构建一个路由器,将REST请求路由到正确的控制器和操作。这里有一些例子:

POST /users
GET /users/:uid
GET /users/search&q=lol
GET /users
GET /users/:uid/pictures
GET /users/:uid/pictures/:pid

有一个正则表达式是很重要的,并且尽可能好,因为路由是必不可少的,并且是在每个请求时完成的。

我们首先必须用正则表达式替换url中的:(untl-end或untl-next正斜杠/),然后我们可以使用正则表达式用请求url验证url。

我们如何用正则表达式替换这些动态路由?类似于搜索以":"开头、以"/"、字符串结尾或"&"结尾的字符串。

这就是我尝试的:

var fixedUrl = new RegExp(url.replace(/''':[a-zA-Z0-9'_'-]+/g, '([a-zA-Z0-0'-'_]+)'));

由于某种原因,它不起作用。我如何实现一个用正则表达式替换:id的正则表达式,或者在与实际请求url进行比较时忽略它们。

感谢的帮助

我会使用:[^'s/]+来匹配以冒号开头的参数(匹配:,然后尽可能多地匹配除/和空白字符之外的字符)。

作为替换,我使用([''w-]+)来匹配捕获组中的任何字母数字字符-_,前提是您也有兴趣使用匹配的参数。

var route = "/users/:uid/pictures";
var routeMatcher = new RegExp(route.replace(/:[^'s/]+/g, '([''w-]+)'));
var url = "/users/1024/pictures";
console.log(url.match(routeMatcher))