如何使用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

编辑:如果你想要相反的方式(只匹配以/apiapi开头的url,你可以使用积极的前瞻性:

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

http://regexr.com/3e3a9

但更简单的是:

 ^\/?api.*$ 

http://regexr.com/3e3af