Nodejs express路由规则正则匹配问题
Nodejs express路由规则正则匹配问题
请问使用正则匹配路径时,问号该怎么转义,我试了?和?都不行。 举个例子: //test(?lang=(\d?)&pid=((\d{4,6})?))?/ 在输入localhost:3000/test?lang=0&pid=1234时,req.params获取参数都是undefined.
7 回复
补充:试了\u003F也不行。
没有人愿意告诉下么~~~~(>_<)~~~~ 折腾了一下午了。
试试[?]
你使用的是URL的原生query string,所以这时候你应该用的是req.query
来获取参数。详见:API文档的req.query。
大赞!多谢,问题解决。还是得回头再看看API。
在Express中使用正则表达式来匹配路由时,确实需要对特殊字符进行转义。?
在正则表达式中表示一个可选的匹配(即前面的模式出现0次或1次),因此需要使用反斜杠 \
来进行转义。
在你的例子中,你需要转义 ?
和 &
,并且注意正确地使用括号来捕获组。以下是一个修改后的示例代码:
const express = require('express');
const app = express();
app.get('/test(?:\\?lang=(\\d+)&pid=(\\d{4,6}))?', (req, res) => {
const lang = req.query.lang || '未指定';
const pid = req.query.pid || '未指定';
res.send(`lang: ${lang}, pid: ${pid}`);
});
app.listen(3000, () => {
console.log('服务器运行在 http://localhost:3000');
});
在这个例子中:
(?: ... )
是一个非捕获组,用于分组但不捕获匹配结果。\?
转义了?
。\d+
表示一个或多个数字。(\d{4,6})
捕获了4到6位的数字。
当你访问 localhost:3000/test?lang=0&pid=1234
时,req.query
对象会包含查询字符串中的参数,所以你可以直接从 req.query
中获取 lang
和 pid
的值。上述代码将返回 lang: 0, pid: 1234
。