0

我想用逗号分隔列表调用端点,假设我想用例如“hey,you”或“hey,you,abc”调用

如果我打电话给

卷曲“ http://localhost:8896/嘿,你

它正在使用以下路线:

router.get('/:id([a-z]{3},[a-z]{3})', (ctx) => {
  ctx.status = 200;
})

但是这条路线不起作用:

router.get('/:id([a-z]{3}(,[a-z]{3})*)', (ctx) => {
  ctx.status = 200;
})

我希望这个

(,[az]{3})*

允许使用 , 和 3 个字符的重复子组。

我究竟做错了什么?

4

1 回答 1

0

您可以使用/(^[a-z]{3}(?:,[a-z]{3})*$)/以逗号分隔的字符串作为唯一响应,您可以在其中拆分结果。

或者,如果您需要正则表达式为您拆分它们,您可以使用类似/,?([a-z]{3}),?/g. 但我不知道如何在路由中启用全局标志,它也会接受类似,hey,youor的东西hey,you,

但是,快速路由正则表达式使用它自己的正则表达式规则和不允许捕获组的path-to-regexp 包(?:),然后,您不能根据需要定义任何重复模式。

所以看起来重复的唯一方法是在键名后面加上*(零个或多个)或+(一个或多个),所以我们可以使用类似/:id+([a-z]{3},?)where you can enable strict、sensitive 和 end 之类的东西。

您可以使用Express Route Tester测试您的正则表达式路径。

所以它会是这样的:

router.get('/:id+([a-z]{3},?)', (ctx) => {
  ctx.status = 200;
})

您可能需要对 id 进行后处理以删除,.

另一种选择是使用中间件

于 2018-03-24T12:09:30.220 回答