Regex 正则表达式匹配不带';与特定模式不匹配:快速路由器

Regex 正则表达式匹配不带';与特定模式不匹配:快速路由器,regex,node.js,express,Regex,Node.js,Express,我想忽略express服务器上表单/foo/*的所有路径。 所以我想做 app.get('someRegexThatDoesntMatchFoo/*', routes.index) 我试过了 app.get('/^\(\(.*foo/.*\)\@!.\)*$', routes.index); 但这不起作用——它没有捕获除foo之外的所有路由并应用路由。索引相反,对于任何/bar请求,我都会得到一个无法获得bar 有什么建议吗 谢谢 以下正则表达式将匹配除以/foo开头的路径以外的任何路径/

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

app.get('someRegexThatDoesntMatchFoo/*', routes.index)
我试过了

app.get('/^\(\(.*foo/.*\)\@!.\)*$', routes.index);
但这不起作用——它没有捕获除foo之外的所有路由并应用
路由。索引
相反,对于任何
/bar
请求,我都会得到一个
无法获得bar

有什么建议吗


谢谢

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

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

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

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

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

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

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

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

app.get(/^\/([^f][^o][^o]|.{1,2}|.{4,})\/.*$/, routes.index);
app.get(/^\/([^f]|f[^o]|fo[^o]|foo[^/]).*$/, routes.index);
随着字符串大小的增加,此解决方案变得越来越复杂

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

在配置路由时,您必须始终以更特殊的规则开始,以最通用的规则结束。这样你就不会遇到这样的问题


首先必须为
/foo/*
定义路线,然后为所有其他
*
负前瞻regexp工作定义路线(至少在现代):


在不太了解您将接收的路径的情况下,应该使用否定断言(lookaheads/lookbehinds)来完成此操作。这是什么regex语言?对于大多数lang来说,简单的/foo/*(?!)$字符串将失败。您的想法是对的,但JavaScript不支持lookbehinds()。看起来头很好:
/^\/(?!foo(\/^$).*$/
忽略”看起来像什么?如果我们让这个函数为空,它只会挂起服务器,对吗?…我不确定你的应用程序是什么,但你可以选择如何处理它。只是放一个
返回语句将导致应用程序挂起,或者您可以重定向,或者发送带有相应状态代码的错误消息。如果您只想不发送任何内容,可以使用
res.end()