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

新手上路,请多包涵

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

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

但是,它不适用于 path-to-regexp。从 那里 查看测试结果

在此处输入图像描述

那么在 path-to-regexp 中实现我的目标的正确方法是什么?

[更新 1]

更多细节:实际情况是我使用的是 angular2 + koajs。在 angular2 中,浏览器可能会向服务器发出客户端路由 url。请参阅我关于此的 另一个问题

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

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

原文由 ricky 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 1k
1 个回答

有关快速路由测试器如何工作的解释,请参阅我的评论。

如果你只是想要一个简单的正则表达式来检查一个字符串不是以 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

原文由 Simon Hänisch 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题