регулярное выражение в javascript для удаления числового пути из url

#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