Express.JS正则表达式为example.com/:username

时间:2013-07-07 11:59:08

标签: regex node.js express

// ex: http://example.com/john_smith
app.get('/^(a-z)_(0-9)', function(req, res) {
    res.send('user'); 
});

//  ex: http://example.com/john_smith/messages/1987234
app.get('/^(a-z)_(0-9)/messages/:id', function(req, res) {
    res.send('message');
});

我为应用程序编写了上面的代码,我希望将用户名作为url变量传递给node.js,就像我要做的那样:$ username = $ _GET ['username'];用PHP。我不太擅长写正则表达式,所以我想看看是否有人能让我走上正轨。提前谢谢。

2 个答案:

答案 0 :(得分:0)

您正在寻找req.params,这是正则表达式中所有捕获组的数组。
捕获组从1开始; req.params[0]就是整场比赛。

答案 1 :(得分:0)

根据您的要求,您似乎不需要正则表达式。只需在规则中使用变量,如下所示:

// Grabs whatever comes after /user/ and maps it to req.params.id
app.get('/user/:id', function (req, res) {
    var userId = req.params.id;
    res.send(userId);
});

如果您想要更好的控制,可以使用正则表达式。要从表达式中获取您感兴趣的内容,请使用捕获组(通常表示为一组匹配的括号):

// Grabs the lowercase string coming after /user/ and maps it to req.params[0]
app.get(/^\/user\/([a-z]+)$/, function (req, res) {
    var userId = req.params[0];
    res.send(userId);
});

有点偏离主题,但这里有一个非常好的介绍来表达.js将帮助你更好地理解它(包括路线如何工作): http://evanhahn.com/understanding-express-js/