如何使用path-to-regexp匹配所有不以/ api /开头的path
当使用path-to-regexp时 ,如何匹配所有不以/api/
开头的path?
通过使用原生JavaScript RegExp /^(?!\/api\/).*/
将匹配/x/y/z
。 从这里看testing结果
但是,它不适用于path正则expression式。 从那里看到testing结果
那么在path-to-regexp中实现我的目标的正确方法是什么?
[更新1]
更多细节:真实的情况是我正在使用angular2 + koajs。 而在angular2中,浏览器可能会向服务器发出一个客户端路由URL。 请看看我的另一个问题 。
为了解决这个问题,正如@mxii所build议的那样,我试图用koa-repath将不以/api/
开头的所有请求redirect到根URL: http://localhost:3000/
excepte它是静态资源(js / json / html / png / …)请求。
而koa-repath
使用path-to-regexp
来匹配path。 这就是为什么我问这个问题。
请参阅我的评论以获取关于快速路由testing程序如何工作的解释。
如果你只是想要一个简单的正则expression式来检查一个string不是以api
或/api
开头的,那么你不需要“path-to-regex”,你可以简单地使用这个正则expression式:
/^(?!\/?api).+$/
说明:
^ => beginning of string (?!) => negative look-ahead \/? => 0 or 1 slash .+ => 1 or more character (any except newline) $ => end of string
所以如果string的开头没有跟随/api
(可选斜线),那么你得到一个匹配。
有关示例,请参见http://regexr.com/3e3a6 。
编辑:如果你想要相反的方式(只匹配以/api
或api
开头的url,你可以使用积极的前瞻性:
^(?=\/?api).+$
但更简单的是:
^\/?api.*$