在我的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和2-正确, 对于3是:“ 2-word3”。它改变了参数! 我测试的任何其他参数,我只是从前一个单词+'-'+最后一个单词中得到最后一个字符。
我避免使用'*',因为Nodejs已知有一个当前问题,它将在下一个主要版本中修复。我将其用于测试,效果很好,可以看到发送的参数,但它也允许我要禁止的所有字符,例如:{}?“:'等。
Q1:正则表达式如何改变我的参数?!?! 问题2:我该怎么做?在node.js中,我在regex101.com上测试了多个版本,它们在那儿工作正常,但在node.js中却无法正常工作
答案 0 :(得分:1)
尝试使用正则表达式:^\w{1,15}(?:-\w{1,15}){0,4}$
编辑: 这似乎是Express的正则表达式解析器中的错误。似乎将第一个右括号视为key(例如kitty)值的结尾
解决:
使用正则表达式:/test/((\w+)(-\w+)?(-\w+)?(-\w+)?(-\w+)?)
在代码中,将捕获的组的值合并为0到4