正则表达式匹配与特定模式不匹配的路径:Express Router

时间:2013-09-09 18:08:11

标签: regex node.js express

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

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

我试过了

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

但是没有用 - 它没有捕获all-routes-besides-foo并应用routes.index而是为CANNOT GET bar个请求获得/bar

有什么建议吗?

谢谢!

4 个答案:

答案 0 :(得分:3)

以下正则表达式将匹配除以/ foo /

开头的路径以外的任何路径
app.get(/^\/([^f][^o][^o]|.{1,2}|.{4,})\/.*$/, routes.index);

我认为这是一个标准的javascript正则表达式。

答案 1 :(得分:3)

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

解决方案

以下正则表达式将匹配除以/ foo /

开头的路径以外的任何路径
app.get(/^\/([^f]|f[^o]|fo[^o]|foo[^/]).*$/, routes.index);

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

推荐

无论如何,在这里寻找一个正则表达式是不对的。

配置路线时,您必须始终使用更特殊的规则,并以最常规的方式完成。像这样你不会遇到这样的问题。

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

答案 2 :(得分:1)

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

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

app.get('*', routes.index);

答案 3 :(得分:1)

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

app.get(/^(?!\/foo\/)/, routes.index);