Javascript路由正则表达式

onl*_*oon 8 javascript regex

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

POST /users
GET /users/:uid
GET /users/search&q=lol
GET /users
GET /users/:uid/pictures
GET /users/:uid/pictures/:pid
Run Code Online (Sandbox Code Playgroud)

拥有一个正则表达式并尽可能好,这一点非常重要,因为路由是必不可少的,并且在每次请求时都能完成.

我们首先必须用正则表达式替换:(直到结束或直到下一个正斜杠/),然后我们可以使用它来验证带有请求URL的URL.

我们如何用正则表达式替换这些动态路由?就像搜索以":"开头并以"/"结尾的字符串,结束字符串或"&".

这是我试过的:

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

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

感谢帮助

Imr*_*ran 14

我将:[^\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))
Run Code Online (Sandbox Code Playgroud)

  • 我认为 `([\\w-]+)` 中缺少下划线 ( _ ) 吗? (2认同)