我们正在使用expressJwt库,我希望能够为以下路由GET
排除api/items/:id
,但不包括任何看起来像api/items/:id/special-action
的路由。
到目前为止,我只能排除所有拥有:id
的路线。
以下是我们排除GET
个:id
路线的方法。
this.app.use(expressJwt({ secret: secrets.JWT }).unless({
path: [
...
{ url: /\/api\/items\/(.)/, methods: ['GET'] },
...
]
});
我已尝试过{ url: /\/api\/items\/(.)\//, methods: ['GET'] }
但它与任何路线都不匹配,因此不会排除:id
的路线。
我使用正则表达式的方式还有一些问题,但我很难看到它。我是否需要将(.)
更改为不匹配全部?我想它可能与尾随斜杠相匹配
答案 0 :(得分:1)
您可以使用
/^\/api\/items\/([^\/]*)$/
[^\/]*
否定字符类匹配除/
以外的0个或多个字符,^
/ $
个锚点确保将针对整个字符串尝试该模式。
请参阅regex demo。
<强>详情
^
- 字符串锚的开始\/api\/items\/
- 匹配文字/api/items/
子字符串([^\/]*)
- 捕获第1组:除/
以外的任何0 +字符。$
- 字符串锚定结束。
请注意,如果您想确保[^\/]*
之后没有/
,请在结尾处添加$
字符串锚定结束。