#javascript #regex #string #url
#javascript #регулярное выражение #строка #url
Вопрос:
У меня есть URL-адреса, подобные приведенным ниже, с идентификатором клиента и т.д. Я хочу удалить их и поставить вместо них звездочку. Приведенные ниже примеры дадут вам лучшее представление.
/paas/service/3.0/part/d878bc1e-9bb8-4a0e/log/account/7367c100-9390-11e3/resource/AdminHistory --> /paas/service/3.0/part/*/log/account/*/resource/AdminHistory
/hs/service/3.0/bootstrap/mnd/3388959354 --> /hs/service/3.0/bootstrap/mnd/*
/paas/service/3.0/part/d878bc1e-9bb8-4a0e-b224-a4ba0d7dfcec/asset --> /paas/service/3.0/part/*/asset
/paas/service/3.0/part/3c5631df-52c9/servicepolicy/8ee6ba08-8d7a/carrierPlan/c2b4a364-98e3-4546 --> /paas/service/3.0/part/*/servicepolicy/*/carrierPlan/*
Идентификаторы могут быть либо числовыми, либо буквенно-цифровыми. Как мне подойти к этому?
Комментарии:
1. Вы можете просто сделать что-то вроде:
url.replace(new RegExp(id, 'g'), '*')
.
Ответ №1:
Идентификаторы могут быть либо числовыми, либо буквенно-цифровыми.
Все части в ваших примерах URL-адресов содержат либо буквы, либо цифры, поэтому вам нужно знать, какой текст находится перед идентификатором, чтобы вы могли настроить таргетинг на него плюс следующий идентификатор.
Так что, возможно, что-то вроде этого:
function modifyURL(url) {
return url.replace(/(/(?:part|account|mnd|servicepolicy|carrierPlan)/)[^/] /g, "$1*");
}
console.log(modifyURL("/paas/service/3.0/part/d878bc1e-9bb8-4a0e/log/account/7367c100-9390-11e3/resource/AdminHistory"));
console.log(modifyURL("/hs/service/3.0/bootstrap/mnd/3388959354"));
console.log(modifyURL("/paas/service/3.0/part/d878bc1e-9bb8-4a0e-b224-a4ba0d7dfcec/asset"));
console.log(modifyURL("/paas/service/3.0/part/3c5631df-52c9/servicepolicy/8ee6ba08-8d7a/carrierPlan/c2b4a364-98e3-4546"));
Чтобы объяснить регулярное выражение, которое я использовал:
( // start of capturing submatch
/ // match a forward slash
(?: // start of non-capturing group
part|account|mnd|servicepolicy|carrierPlan // match one of those words
) // end of non-capturing group
/ // match forward slash
) // end of capturing submatch
[^/] // match one or more of anything but a forward slash