快速路由中的正则表达式未捕获完整请求参数

时间:2017-09-25 01:58:50

标签: javascript regex express

我几乎肯定这个bug存在于路由定义中表达正则表达式模式的方式,但是再一次,它可以存在于我的模式中(我还是一个正则表达式noob,所以请原谅我)。在我的快速路线定义中,我试图匹配路线路径中的数字:

const router = express.Router()

// pattern: ignore first capture (/) 
router.route(/^(?:\/)(\d+)$/)
  .get(...callback)

目前,捕获的数字可以是任意长度。因此,当URL为http://localhost:8000/1234时,事情正在按预期工作,除了未捕获完整数字的事实 - 当我在回调中记录请求参数时,我得到:{ '0', '4' }。如您所见,我得到了最后一位数:4的数字:1234。出了什么问题?我在这里大力搔头。当我在regexr和节点REPL:/^(?:\/)(\d+)$/.exec('1234')[1] === '1234'中测试我的正则表达式时,它似乎正确匹配。任何帮助/见解将不胜感激。感谢。

[编辑]:根据@Tolsee的建议,我将快递包从v 4.15.3升级到v 4.15.5(最新版本)。这似乎解决了这个问题;现在,我的正则表达式模式正在为这条路线工作。我猜测问题在于旧的快递包。

1 个答案:

答案 0 :(得分:0)

你不应该在这里使用Regexp/:id/docs)会更好。

如果您仍想使用Regexp,请尝试/^\d+(?:\/(?=$))?$/i

希望它对你有用!