Express 4中的正则表达式捕获对文件扩展名.gz的静态资产的所有请求

时间:2015-08-14 06:09:38

标签: regex node.js express

我希望做这样的事情:

app.get('*.gz',function(req,res,next){

  res.set('Content-Encoding','gzip');
  next();

});

但我不认为我使用的正则表达式是正确的。如示例所示,我正在寻找能够捕获对扩展名为.gz的静态资产的所有请求的中间件。 (.gz是由gzip压缩的文件)。我的例子是正确的吗?

如果有人能提到Expess使用的正则表达式,那么这将有助于我查找参考资料。到目前为止,我从来没有读过它们是标准的JS正则表达式还是Perl样式还是什么?

3 个答案:

答案 0 :(得分:1)

我认为您可以尝试app.use而不是app.get并检查您正在寻找的静态文件是否正确,类似这样

app.use("*.gz" , function(req,res,next){
    console.log(req.originalUrl);
    next();
}

您必须在提供静态文件之前放置此代码(app.use(express.static(...))

答案 1 :(得分:1)

(.*)\.gz$

这将捕获没有扩展名的文件名。如果您需要扩展名,请将右括号移至gz右侧。这可能会给你一些误报,这取决于你的数据结构 - 你在问题中没有提到,顺便说一句。这样可以避免任何看起来像这样的文件名:filename.gz.tar

以下是regex101.com的代码细分:

1st Capturing group (.*)
    .* matches any character (except newline)
        Quantifier: * Between zero and unlimited times, 
        as many times as possible, giving back as needed [greedy]
\. matches the character . literally
gz matches the characters gz literally (case sensitive)
$ assert position at end of the string
g modifier: global. All matches (don't return on first match)

答案 2 :(得分:0)

正则表达式为'.*\.gz',以获取扩展名为.gz的所有文件名

我已经使用前端js了一点,正则表达式用反斜杠而不是单引号关闭。请检查这是否是输入正则表达式的正确方法。

您目前正在使用通配符“*”技术。各种语言都支持这种功能,例如VB(Visual Basic)我会选择具有相同扩展名的文件。