4

我想在我的快速服务器上忽略 /foo/* 形式的所有路径。所以我想做

app.get('someRegexThatDoesntMatchFoo/*', routes.index)

我努力了

app.get('/^\(\(.*foo/.*\)\@!.\)*$', routes.index);

但这没有用-它没有捕获all-routes-besides-foo并应用,routes.index而是我得到了CANNOT GET bar任何/bar请求

有什么建议么?

谢谢!

4

4 回答 4

3

第一个答案不正确,这就是我再次发布的原因。

解决方案

以下正则表达式将匹配除以 /foo/ 开头的任何路径

app.get(/^\/([^f]|f[^o]|fo[^o]|foo[^/]).*$/, routes.index);

随着字符串大小的增加,这个解决方案变得越来越复杂。

推荐的

无论如何,在这里寻找正则表达式不是正确的事情。

在配置路线时,您必须始终从更特殊的规则开始,并以最一般的规则结束。像这样你不会遇到这样的问题。

您首先必须为所有其他人定义您的路线,/foo/*然后再为所有其他人定义路线*

于 2013-09-10T06:48:05.427 回答
3

以下正则表达式将匹配除以 /foo/ 开头的任何路径

app.get(/^\/([^f][^o][^o]|.{1,2}|.{4,})\/.*$/, routes.index);

我假设这是一个标准的 javascript 正则表达式。

于 2013-09-09T18:19:06.680 回答
2

定义/foo/*处理(或不处理)的路由,然后使用通配符处理其他所有内容。

app.get('/foo/*', function(req,res) {
  //ignore or handle
});

app.get('*', routes.index);
于 2013-09-09T19:46:17.667 回答
2

负前瞻正则表达式有效(至少在现代):

app.get(/^(?!\/foo\/)/, routes.index);
于 2018-07-11T19:23:13.457 回答