用于Express中路由匹配的正则表达式

时间:2012-06-01 22:17:40

标签: regex node.js express

我对正则表达式不太满意,所以我想确保我正确地做到这一点。假设我有两条非常相似的路线/discussion/:slug//page/:slug/。我想创建一个匹配这两个页面的路线。

app.get('/[discussion|page]/:slug', function(req, res, next) {
  ...enter code here...
})

这是正确的方法吗?现在我只是创建两条不同的路线。

someFunction = function(req, res, next) {..}
app.get('/discussion/:slug', someFunction)
app.get('/page/:slug', someFunction)

2 个答案:

答案 0 :(得分:104)

app.get('/:type(discussion|page)/:id', ...)有效

答案 1 :(得分:60)

您应该使用文字javascript正则表达式对象,而不是字符串,并且@sarnold是正确的,您需要用于替换的parens。方括号用于字符类。

const express = require("express");
const app = express.createServer();
app.get(/^\/(discussion|page)\/(.+)/, function (req, res, next) {
  res.write(req.params[0]); //This has "discussion" or "page"
  res.write(req.params[1]); //This has the slug
  res.end();
});

app.listen(9060);

(.+)表示必须存在至少1个字符的slu or或此路线不匹配。如果您希望它与空的slug匹配,请使用(.*)