如何使用path-to-regexp匹配所有不以/ api /开头的路径?
问题描述:
当使用path-to-regexp时,如何匹配所有不以/api/
开头的路径?如何使用path-to-regexp匹配所有不以/ api /开头的路径?
通过使用原生JavaScript RegExp /^(?!\/api\/).*/
将匹配/x/y/z
。请参阅here的测试结果
但是,它不适用于path-to-regexp。看到there
那么什么是实现路径对正则表达式我的目标的正确方法的测试结果?
[更新1]
更多细节: 真正的情况是,我使用angular2 + koajs。而在angular2中,浏览器可能会向服务器发出客户端路由URL。请参阅我的another question关于此。
为了解决这个问题,通过@mxii的建议,我试图用koa-repath重定向,并非始于/api/
到根网址的所有请求:http://localhost:3000/
excepte它的静态资产(JS/JSON/HTML/PNG/...) 要求。
和koa-repath
使用path-to-regexp
来匹配路径。这就是我问这个问题的原因。
答
请参阅我的评论以获取关于快速路由测试程序如何工作的说明。
如果你只是想要一个简单的正则表达式来检查一个字符串不以api
或/api
开始,你并不需要“路径对正则表达式”对于这一点,你可以简单地使用这个表达式:
/^(?!\/?api).+$/
说明:
^ => beginning of string
(?!) => negative look-ahead
\/? => 0 or 1 slash
.+ => 1 or more character (any except newline)
$ => end of string
所以,你得到一个匹配,如果字符串的开头后面没有/api
(可选斜线)。
编辑:如果您想用另一种方式圆(只匹配的网址开头/api
或api
,您可以使用正前瞻:
^(?=\/?api).+$
但它更简单,那么:
^\/?api.*$
快速路由测试器不是一个正则表达式测试器......你输入一个类似'/ api/user /:name /:age /'的路由,然后像'/ api/user/john-doe/21'这样的路径给你钥匙('1。名字和'2。路线')和结果('名字:john-doe'和'年龄:21')...“正则表达式”模块将正则表达式排除在路由之外,因此您可以通过正则表达式检查路径字符串是否匹配它。我没有得到你想要达到的目标,请你澄清一下。 –
谢谢西蒙,请参阅我的更新了解更多详情 – ricky