Regex 正则表达式匹配不带';与特定模式不匹配:快速路由器
我想忽略express服务器上表单/foo/*的所有路径。 所以我想做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开头的路径以外的任何路径/
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()代码>。