【发布时间】:2023-03-18 11:55:01
【问题描述】:
我在 Perl 上大吃一惊。我对正则表达式很满意(但仍然容易出错)。
为什么(*) 在名为 param 的 Express 路由中用作正则表达式?
为什么(.*) 不能在名为 param 的 Express 路由中用作正则表达式?
像([\\w:./]+) 这样的方法是不是更可靠?
我正在尝试使用旨在在值中包含斜杠的路由参数。
例如
如果请求是:
http://www.example.com/new/https://www.youtube.com/trending
...我正在使用这条路线:
app.get('/new/:url', (req, res) => {
console.log('new')
console.log(req.params.url)
})
我希望 url 等于 https://www.youtube.com/trending
我知道路径是在斜杠上分割的,所以我想我可以使用 a regular expression in parentheses after the named parameter 来匹配斜杠。
我试过/new/:url(.*),我认为greedily应该匹配任何东西,包括斜线,但这使得路由完全失败。为什么这不起作用?
通过我自己的反复试验,我发现/new/:url([\\w:./]+) 有效。这对我来说很有意义,但似乎不必要地复杂。这是“正确的方式”吗?
最让我困惑的是我发现in a YouTube video example... 为什么/new/:url(*) 有效? * 表示前一项的 0 个或多个,但星号之前没有任何内容。
我感觉答案就在this GitHub issue,但我并不清楚阅读该线程究竟发生了什么。 (*) 是否依赖于可能会在下一版 Express 中更正的错误?
【问题讨论】:
-
@Adam 我已经读过了,它要么没有回答我的问题,要么就是我不明白。如果您阅读我的问题,您会看到我引用了该 GitHub 问题。