ExpressJS - 匹配路径的正则表达式不起作用

时间:2014-01-31 14:25:38

标签: javascript regex node.js express

我有一个简单的正则表达式,它应匹配由字母(0-5)组成的单词,但它似乎不起作用。正则表达式应该如何在ExpressJS中使用?我尝试验证的网址可能类似于something.com/abcd

var express = require("express"),
    app = express();

app.get("/:id(^[a-z]{0,5}$)", function(req, res) {
    res.send("The right path!");
});

app.listen(8000);

3 个答案:

答案 0 :(得分:6)

要设置接受/后跟最多五个ascii字符的网址,您可以这样做:

var express = require("express"),
app = express();

app.get("/[a-z]{0,5}$", function(req, res){
    res.send("Right path!");
});
app.listen(8000);

结果:

GET http://localhost:8000/
Right path!

GET http://localhost:8000/abcde
Right path!

GET http://localhost:8000/abcdef
Cannot GET /abcdef

注意:快递case insensitive routing by default.要更改它,请将其放在脚本的顶部:

app.set('case sensitive routing', true);

现在,[a-z]仅匹配小写字符:GET /abc但不匹配GET /ABC

答案 1 :(得分:1)

要明确: 原始问题是匹配

中的express.js路由的有效语法
  

NAMED参数

唯一的错误是在RegExp中有开始/结束锚点。 我认为它们是自动添加的。

A nice tool to validate express routes说没关系:

/:id([a-z]{0,5})

顺便说一句:对于那些对这个问题提出异议的人:对你感到羞耻。

我强烈建议使用“named param”语法,因为 app.param是一个不错的功能。

答案 2 :(得分:0)

我不知道app.get是做什么的,但如果我们谈论的是正则表达式:

^可以位于第一个位置。这意味着需要从头开始比较字符串。 或者,在[^ \ d]块中,这意味着反转,在这种情况下,这是除数字之外的任何符号。

删除^符号