【发布时间】:2018-10-22 01:11:18
【问题描述】:
上下文
我的代码采用 url 路径并将路径参数替换为“*”。 我所有的网址都遵循JSON API 命名约定。 所有有效的 url 资源部分都遵循以下规则:
- 成员名称应该以字符“a-z”开头和结尾(U+0061 到 U+007A)
- 成员名称应仅包含字符“a-z” (U+0061 到 U+007A)、“0-9”(U+0030 到 U+0039)和连字符减号 (U+002D HYPHEN-MINUS, “-”) 作为多个单词之间的分隔符。
pass 参数通常是一个 id(数字、uuid、guid 等)。
以下是几个转换示例:
/user/e09e4f9f-cfcd-4a23-a88f-b9f2f265167f/info -> /user/*/info/user/e09e4f9f-cfcd-4a23-a88f-b9f2f265167f -> /user/*/user/1 -> /user/*
我有什么
/^[a-z][a-z0-9-]*[a-z]$/
问题在于它没有将 uuid 作为路径参数处理。
这是我解析 url 的函数(抱歉没有时间创建 jsfiddle):
const escapeResourcePathParameters = resource => resource
.substr(resource.startsWith('/') ? 1 : 0)
.split('/')
.reduce((url, member) => {
const match = member.match(REGEX.JSONAPI_RESOURCE_MEMBER);
const part = match
? member
: '*';
return `${url}/${part}`;
}, '');
问题
我需要一个符合上述规则并适用于上述示例的正则表达式。
更新:
我添加了用于解析 url 的函数。要测试您的正则表达式,只需将其替换为 REGEX.JSONAPI_RESOURCE_MEMBER 并传递 URL,如
/user/e09e4f9f-cfcd-4a23-a88f-b9f2f265167f/info,应该返回/user/*/info
【问题讨论】:
-
什么是“路径参数”(需要用“*”代替)——如何“识别”?
-
/user/1中的1如何符合Member names SHOULD start and end with the characters “a-z”的要求? -
@MatusDubrava 因为在这种情况下
1是一个参数,而不是 API 的成员。 -
@MatusDubrava 不会导致,1是路径参数,不应该遵守规则,我需要替换它
-
就是这样的问题,我需要找到不符合规则的资源部分并替换它们
标签: javascript regex parsing url