12

更新:我的问题没有准确传达我想要实现的目标。我希望匹配/foo,和(例如)/foo/下的任何内容,而不是具体的给定路径。原始问题如下。/foo//foo/asdf/jkl


我想匹配以下路径:

/foo
/foo/bar
/foo/bar/baz

这些也应该起作用:

/foo/          ->  /foo
/foo/bar/      ->  /foo/bar
/foo/bar/baz/  ->  /foo/bar/baz

我尝试了以下方法:

app.get('/foo/*', ...);

/foo但是,这在这种情况下失败了。我知道我可以提供一个正则表达式而不是一个字符串,但这肯定是一个常见的要求,所以我会惊讶地发现模式匹配 DSL 不适应它。

4

6 回答 6

8

看来正则表达式是要走的路:

app.get(/^[/]foo(?=$|[/])/, ...);
于 2013-05-16T16:21:27.750 回答
7

我知道这是一个老问题,但我有同样的问题,我想出了这个:

app.get(['/foo', '/foo/*'], ...);

这将匹配/foo,/foo/和 下的任何内容/foo/...。我认为这是一个比正则表达式更具可读性的解决方案,并且它清楚地传达了预期的内容。

于 2019-12-22T20:34:26.683 回答
5

如果您想以一种模式匹配它们:

app.get('/foo(/bar(/baz)?)?', ...)

在最后允许可选的默认 Express 行为/适用。

编辑:这个怎么样?

app.get('/foo/:dummy?*', ...)
于 2013-05-16T16:08:09.733 回答
3

我也遇到了这个问题,我不得不同意正则表达式效果最好,但是有一点改进:

app.get('/foo([/].*)?', ...);

这将匹配:

/foo
/foo/
/foo/what/ever/you/put/after

/foo/:dummy?*没有真正考虑到可选/之后foo/foo(/:dummy*)?并且没有真正正确匹配。

/foo(/:dummy)?*有点工作,但创建了一个额外的变量,因为它同时具有path单独的*变量,这在这种情况下是不合适的。

所以我个人会坚持使用正则表达式。

于 2016-09-22T15:13:18.147 回答
0

去掉斜线,它应该可以正常工作:

app.get('/foo', ...);
于 2013-05-16T02:14:24.120 回答
0

这是 regex101 中的@davidchambers答案示例。

但是我删除[]并添加了 escape \,注意正则表达式选项是gm(全局和多行)。

app.get(/^[/]foo(?=$|[/])/, ...);

https://regex101.com/r/q38rvF/1

于 2022-01-15T05:56:14.303 回答