如何解决用路径字符串中的 {parameterNames} 替换所有 :parameterNames
在 javascript 中,我将如何获取一个字符串并替换其中匹配模式 :someParameter 和 {someParameter} 的值。
这是将用于 Express 路由的 url 模式转换为 Swagger 使用的模式。
Express 使用:"/api/:param1/:param2"
和
Swagger 规范使用:"/api/{param1}/{param2}"
解决方法
我们可以使用RegExp capture-groups:/(?::)([^/]*)/g
/
(?::) # (?:x) -> Match for,but don't remember pattern `x`
([^/]*) # (x) -> Match for and remember pattern `x`
# [^x] -> Match all except `x`
# x* -> Match for `x` 0-n times (greedy)
/g # g -> global-flag
记住的组可以是 used in the replacement-string as $n
,其中 n
是第 n 组。
function expressToSwagger(str) {
return str.replace(/(?::)([^/]*)/g,'{$1}');
}
const expressStr = '/api/:param1/:param2/someText/:param3';
console.log(expressToSwagger(expressStr));
您可以在 /
上拆分字符串,然后映射到结果数组并检查项目是否以 :
开头,如果是,则返回之间的项目(没有 :
)括号,否则返回项目。然后 join
数组与 /
一起返回。
const expressString = "/api/:param1/:param2/notAParam/:anotherParam";
const result = expressString.split("/").map((part) => {
return part.startsWith(":") ? `{${part.substring(1)}}` : part;
}).join("/");
console.log(result);
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。