ExpressJS路由正则表达式:如何将param匹配到除一条路由之外的所有内容

时间:2016-10-04 22:06:34

标签: regex node.js express

我有一个定义类似这样的路线来捕捉code param:

app.get('/:code([a-zA-Z]{3})', codeHandler);

它匹配所有三个字母长的代码,并且工作正常。但我想改变它以匹配除一个以外的每个代码。例如,假设我要排除" cct"。我尝试使用否定前瞻来解除" cct"从路线到 像这样修改上面的匹配器:

app.get('/:code((?!cct)[a-zA-Z]{3})', codeHandler);

但现在这条路线无法匹敌。即使过去曾经被捕获的有效代码现在也不匹配。我不知道我做错了什么。

2 个答案:

答案 0 :(得分:1)

我认为最简单的方法是保留你的正则表达式,但是在codeHandler函数里面有以下几点:

if(req.url == '/cct') return next();

然后express将继续前进到下一个路由处理程序。如果您为' / cct'定义了一个它将转到那一个 - 否则会导致404错误,因为找不到页面。

答案 1 :(得分:0)

试试这个:

app.get(/^\/((?!cct)[a-zA-Z]{3})$/, (req,res) => {

   console.log(req.params[0]);

})