Контекст
У меня есть код, который принимает URL-путь и заменяет параметры пути на '*'.Все мои URL-адреса соответствуют правилам JSON API .Все действительные части ресурса URL следуют следующим правилам:
- Имена участников ДОЛЖНЫ начинаться и заканчиваться символами «az» (от U + 0061 до U + 007A)
- Имена членов ДОЛЖНЫ содержать только символы «az» (от U + 0061 до U + 007A), «0-9» (от U + 0030 до U + 0039) и дефис минус (U + 002D HYPHEN-MINUS, «-«) как разделитель между несколькими словами.
Параметр передачи обычно является идентификатором (число, 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}`;
}, '');
Вопросы
Мне нужно регулярное выражение, которое следует приведенным выше правилам и работает для приведенных выше примеров.
UPD: Я добавил свою функцию, котораяЯ использую для разбора URL.Чтобы проверить свое регулярное выражение, просто замените его на REGEX.JSONAPI_RESOURCE_MEMBER
и передайте URL как /user/e09e4f9f-cfcd-4a23-a88f-b9f2f265167f/info
, оно должно вернуть /user/*/info