如何获取路由路径以匹配同一正则表达式中的必需字符和可选字符?

How to get route path to match on mandatory and optional characters in same regex?

我正在努力寻找匹配必填字符和可选字符的路由路径。

我的路线是这样的:

  expressRouter.get(['/post/:PostID([0-9]+)(-*)?'], async function (req, res) {  
    let Result;
    const PostID = req.params.PostID;
    try {
        Result = await api.getPost(PostID);
    } catch (error) {
        if (error.code === 404) {
            return res.status(404).send("404 | Page Not Found")
        }
        return res.status(500).send(error);
        return res.status(500).send("500 | Internal Server Error");
    }
    res.status(200).json(Result);
});

我正在尝试匹配这样的路线:

/1079-my-favourite-sports
/1080
/1081-new-car

唯一的强制性部分是 ([0-9]+),它给了我 PostID。它的其余部分即 (-.*) 是一个连字符后跟任何字符是可选的,但它是需要存在的 URL slug 的一部分。

如何编写我的路径正则表达式,以便它匹配上面的所有路由?尝试使用 Express Route Tester 但除了匹配第一部分 ([0-9]+)

之外别无他法

对于 Express Rout 1.7.0 及更高版本,使用它来获取 PostID 密钥和可选的 Slug 密钥:

/:PostID(\d+):Slug(-.*)?

旧版本(Express 4.x)很古怪,其中 .* 被解释为 \.(.*)。试试这个:

/:PostID(\d+):Slug(-*)?