如何使用path-to-regexp匹配所有不以/ api /开头的路径?

问题描述:

当使用path-to-regexp时,如何匹配所有不以/api/开头的路径?如何使用path-to-regexp匹配所有不以/ api /开头的路径?

通过使用原生JavaScript RegExp /^(?!\/api\/).*/将匹配/x/y/z。请参阅here的测试结果 enter image description here

但是,它不适用于path-to-regexp。看到there

enter image description here

那么什么是实现路径对正则表达式我的目标的正确方法的测试结果?

[更新1]

更多细节: 真正的情况是,我使用angular2 + koajs。而在angular2中,浏览器可能会向服务器发出客户端路由URL。请参阅我的another question关于此。

为了解决这个问题,通过@mxii的建议,我试图用koa-repath重定向,并非始于/api/到根网址的所有请求:http://localhost:3000/ excepte它的静态资产(JS/JSON/HTML/PNG/...) 要求。

koa-repath使用path-to-regexp来匹配路径。这就是我问这个问题的原因。

+0

快速路由测试器不是一个正则表达式测试器......你输入一个类似'/ api/user /:name /:age /'的路由,然后像'/ api/user/john-doe/21'这样的路径给你钥匙('1。名字和'2。路线')和结果('名字:john-doe'和'年龄:21')...“正则表达式”模块将正则表达式排除在路由之外,因此您可以通过正则表达式检查路径字符串是否匹配它。我没有得到你想要达到的目标,请你澄清一下。 –

+0

谢谢西蒙,请参阅我的更新了解更多详情 – ricky

请参阅我的评论以获取关于快速路由测试程序如何工作的说明。

如果你只是想要一个简单的正则表达式来检查一个字符串不以api/api开始,你并不需要“路径对正则表达式”对于这一点,你可以简单地使用这个表达式:

/^(?!\/?api).+$/ 

说明:

^ => beginning of string 
(?!) => negative look-ahead 
\/? => 0 or 1 slash 
.+ => 1 or more character (any except newline) 
$ => end of string 

所以,你得到一个匹配,如果字符串的开头后面没有/api(可选斜线)。

查看http://regexr.com/3e3a6举例。

编辑:如果您想用另一种方式圆(只匹配的网址开头/apiapi,您可以使用正前瞻:

^(?=\/?api).+$ 

http://regexr.com/3e3a9

但它更简单,那么:

^\/?api.*$ 

http://regexr.com/3e3af