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

ric*_*cky 6 javascript regex routes node.js

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

通过使用本机JavaScript,RegExp /^(?!\/api\/).*/将匹配/x/y/z。从这里查看测试结果 在此处输入图片说明

但是,它不适用于正则表达式路径。从那里查看测试结果

在此处输入图片说明

那么,实现正则表达式路径的正确方法是什么?

[更新1]

更多详细信息:实际情况是我正在使用angular2 + koajs。并且在angular2中,浏览器可能会向服务器发布客户端路由url。请参阅我对此的另一个问题

为了解决这个问题,正如@mxii所建议的那样,我正在尝试使用koa-repath将所有不以开头的请求重定向/api/到根url:http://localhost:3000/除了它是静态资产(js / json / html / png / ...)要求。

koa-repath用于path-to-regexp匹配路径。这就是为什么我问这个问题。

Sim*_*sch 4

请参阅我的评论,了解有关快速路线测试仪如何工作的说明。

如果您只是想要一个简单的正则表达式来检查字符串是否以apior开头/api,则不需要“path-to-regex”,您可以简单地使用此正则表达式:

/^(?!\/?api).+$/
Run Code Online (Sandbox Code Playgroud)

解释:

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

因此,如果字符串开头后面没有跟/api(可选斜杠),您就会得到匹配。

有关示例,请参阅http://regexr.com/3e3a6 。

编辑:如果您想要相反(仅匹配以/api或开头的网址api,您可以使用正向前瞻:

^(?=\/?api).+$
Run Code Online (Sandbox Code Playgroud)

http://regexr.com/3e3a9

但它更简单:

^\/?api.*$
Run Code Online (Sandbox Code Playgroud)

http://regexr.com/3e3af

  • 这里的问题是我需要正则表达式本身的路径。 (2认同)
  • 但我们可能需要它用于使用正则表达式路径的react-router (2认同)