在 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)
88169 次浏览

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

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个字符的蛞蝓,否则此路由将不匹配。使用 (.*),如果你想它匹配一个空弹头以及。

app.get('/:type(discussion|page)/:id', ...)成功了