【发布时间】:2015-10-11 15:25:16
【问题描述】:
这实际上应该是一个相当简单的问题,但由于某种原因我无法让它工作。
我正在使用 Node.js 和 Express 的路由器。我正在尝试捕获如下网址:
http://localhost:3000/items/2
http://localhost:3000/items/35
我有以下正则表达式。 '2' 路线有效,但 '35' 无效,我不知道为什么。
router.get('/items/:id([0-9])', function(req, res){
console.log("I work for /items/2");
});
router.get('/items/:id(^[0-9]*$)', function(req, res){
console.log("I don't work at all :(");
});
当我针对https://regex101.com/#javascript 进行测试时,第二条路由的正则表达式工作得很好。我还尝试了正则表达式 ^\d+$,它适用于 regex101 但不适用于节点。
我是否遗漏了一些明显的东西?在我的 package.json 中使用 "express": "^4.13.3"。
** 更新**
我使用这篇文章中的正则表达式的答案使其工作:Regular Expression in Node.js Express Router
router.get('/items/:id(\\d+)', function(req, res) {
console.log('I work!');
});
但是,即使我添加了一个额外的 '\' 来制作 '^\\d+$',路线仍然没有捕捉到 '25'。
** 更新**
看起来如果我去掉正则表达式锚“^”和“$”,路线就可以工作,但我不明白为什么会这样。
【问题讨论】:
-
反对票有什么特别的原因吗?这似乎是一个非常详细的问题。
-
将整个路径字符串视为一个正则表达式,其中包含命名为
:id的括号分组。这就是为什么在括号内使用^不起作用(尽管$应该可以工作,但实际上它位于路径的末尾)。