const path = '/one/:two/three/:four/five/six/:seven';
const params = [...path.matchAll(/:(\w+)/g)];
const paramNames = params.map(function paramName(param) {
return param[1];
});
let regexPath = path;
for (const paramName of paramNames) {
// /:foo/ ---> /(?<foo>\\w+)/
regexPath = regexPath.replace(new RegExp(`:${paramName}`), `(?<${paramName}>\\w+)`);
}
console.log({ regexPath });
// prints: {regexPath: "/one/(?<two>\\w+)/three/(?<four>\\w+)/five/six/(?<seven>\\w+)"}
// Now it's ready to be passed to a RegExp constructor (Notice how backslashes have been escaped, this is needed when keeping regex as a string).
1条答案
按热度按时间nx7onnlm1#
虽然这个问题是4年前的问题,没有答案,谷歌已经建议它在顶部给我,所以我会张贴自己的解决方案。最初的海报没有特别的编程语言的想法,这是如何可以在JavaScript中完成: