代码之家  ›  专栏  ›  技术社区  ›  SharpBCD

Regex在Nodejs Express Route中更改参数?!怎么可能,怎么修复?

  •  0
  • SharpBCD  · 技术社区  · 7 年前

    在node.js express中,我使用bellow regex。

    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. 单词1(最多15个字符)
    2. Word1-Word2
    3. word1-word2[-word3]…(最多5个,每个字符最多15个,强制使用“-”号)
    4. 带下划线的单词_-一些其他单词-……(IDEM)

    过滤器工作,但是…结果改变了。这怎么可能呢?! 结果是:1&2-正确, 因为3是:“2-word3”。它改变了参数! 任何其他参数我测试,我只是从前一个词+'-'+最后一个词得到最后一个字符。

    我避免使用“*”,因为众所周知nodejs有一个当前的问题,这个问题将在下一个主要版本中解决。我用它进行测试,它很好地工作,发送时我可以看到参数,但它也允许我要禁止的所有字符,比如:??:等等。

    问题1:为什么Regex会改变我的参数????! 问题2:我该怎么做才对?在node.js中,我在regex101.com上测试了几个版本,它们在那里工作得很好,但在node.js中没有。

    1 回复  |  直到 6 年前
        1
  •  1
  •   Matt.G    6 年前

    ^\w{1,15}(?:-\w{1,15}){0,4}$

    Demo

    /test/((\w+)(-\w+)?(-\w+)?(-\w+)?(-\w+)?)