我想在我的快速服务器上忽略表单/ foo / *的所有路径。 所以我想做
app.get('someRegexThatDoesntMatchFoo/*', routes.index)
我试过了
app.get('/^\(\(.*foo/.*\)\@!.\)*$', routes.index);
但是没有用 - 它没有捕获all-routes-besides-foo
并应用routes.index
而是为CANNOT GET bar
个请求获得/bar
有什么建议吗?
谢谢!
答案 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);