正则表达式更改nodejs Express路由中的参数?!这怎么可能以及如何解决?

时间:2018-07-27 21:18:30

标签: node.js regex express

在我的Node.js Express中,我使用下面的正则表达式。

router.get('/test/:name(\\w{1,10}([\-]{1}\\w{0,15}){0,5})', (req, res) => {
    console.log(c.green, 'It works!');
    res.send('name is:' + req.params.name);
});

正确的格式为:

  1. word1(最多15个字符)
  2. word1-word2
  3. word1-word2 [-word3] ...(最多5个字符,每个字符最多15个字符,且中间必须带有'-')
  4. word_with_underscore-some_other_word -....(同上)

过滤器起作用,但是...结果被更改。这怎么可能呢?! 结果是:1和2-正确, 对于3是:“ 2-word3”。它改变了参数! 我测试的任何其他参数,我只是从前一个单词+'-'+最后一个单词中得到最后一个字符。

我避免使用'*',因为Nodejs已知有一个当前问题,它将在下一个主要版本中修复。我将其用于测试,效果很好,可以看到发送的参数,但它也允许我要禁止的所有字符,例如:{}?“:'等。

Q1:正则表达式如何改变我的参数?!?! 问题2:我该怎么做?在node.js中,我在regex101.com上测试了多个版本,它们在那儿工作正常,但在node.js中却无法正常工作

1 个答案:

答案 0 :(得分:1)

尝试使用正则表达式:^\w{1,15}(?:-\w{1,15}){0,4}$

Demo

编辑: 这似乎是Express的正则表达式解析器中的错误。似乎将第一个右括号视为key(例如kitty)值的结尾

解决: 使用正则表达式:/test/((\w+)(-\w+)?(-\w+)?(-\w+)?(-\w+)?) 在代码中,将捕获的组的值合并为0到4