【问题标题】:nodejs Express regex path: working in test, not working in code. What do I do wrong?nodejs Express 正则表达式路径:在测试中工作,而不是在代码中工作。我做错了什么?
【发布时间】:2018-07-19 14:36:14
【问题描述】:

我想在 nodejs express 路由路径中使用一个超级简单的过滤器。参数必须是 word1 或 word2。 测试于:https://forbeslindesay.github.io/express-route-tester/

带表达式:test/:gender(\b(word1|word2)\b)

路径:test/word2

而且一切正常。 "路径匹配路线"

但在代码中:

router.get('^/test/:gender(\b(word1|word2)\b)', function (req, res, next){//something})...;

我得到了 404(从 express 重定向,如果参数不正确,应该如此!)。

注意 1:删除正则表达式字符串,它可以工作。

注 2:我做的另一个过滤器设法使它工作。它必须像:“word1-word2[-moreWords]。我用

实现了它
router.get('^/test/:user_name(*[a-zA-Z0-9][-]*[a-zA-Z0-9])', function (req, res, next) {//something});

并且工作没有问题。

注 3:我也对其进行了测试(我先将它们写在:)https://regex101.com/,当然,它们也可以工作。

那我做错了什么?

【问题讨论】:

  • 您可能在 express 中缺少配置,请向我们提供端口、上下文等 express 配置
  • 试试'^/test/:gender(word1|word2)\\b''^/test/:gender(word1|word2)\b'
  • @WiktorStribiżew 成功了!与 \\b!十分感谢!现在请教我,为什么它适用于快速路由测试而不是代码?这只是一个例子,但我将使用许多正则表达式来防止错误/恶意插入,其中一些更复杂。关于如何/在哪里编写和测试它们以便它们也可以在代码中工作的任何提示?附言你能把它写成回复,这样我就可以结束这个问题了吗?
  • @BasilBattikhi 端口可以影响正则表达式吗?如果端口错了,我会在任何东西上得到浏览器 404(不是 express - 因为它应该),对吧?
  • @SharpBCD 我不这么认为,但你认为你可能会访问不同的端口

标签: node.js regex express


【解决方案1】:

你可以使用

'^/test/:gender(word1|word2)\\b'

注意genderword之间没有字边界,你只能保留尾随字边界。

要定义单词边界,您需要一个文字反斜杠,后跟b,因此在字符串文字内,您应该写两个连续的反斜杠符号。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-07-27
    • 1970-01-01
    • 1970-01-01
    • 2015-01-06
    • 2020-03-11
    • 2015-08-10
    • 1970-01-01
    • 2019-08-23
    相关资源
    最近更新 更多