首页 > 解决方案 > 带有正则表达式的路由参数以捕获所有内容

问题描述

在我的 Node.js (+express) 应用程序中,我期望以下请求:

GET /images/foo1/id500/abc5
GET /images/foo2/id540
GET /images/id500/foo800

换句话说,请求将具有常量前缀/images/和一些我需要捕获的额外随机路径。

app.get("/images/:foo(*)", (req, res) => {
  console.log(req.params.foo);
  res.send(req.params.foo);
});

上面的代码完全符合我的要求,但如果我输入“。” (任何字符)到正则表达式然后它停止工作......

以下代码不起作用:

app.get("/images/:foo(.*)", (req, res) => {
  console.log(req.params.foo);
  res.send(req.params.foo);
});

为什么使用时或按预期工作:foo(.*)时没有给出预期的结果?:foo(*):foo(\\w*)

标签: node.jsexpress

解决方案


如果要匹配正则表达式,必须使用正则表达式匹配。区别如下:

 app.get(/a/, (req, res) => { // Matches anything with an “a” in it, such as /xax.
 app.get('a', (req, res) => { // matches exactly /a

您可以将示例重写为正则表达式,请记住转义/

app.get(/\/images\/:foo(.*)/, (req, res) => {

推荐阅读