Regex для удаления категорий из (многоязычных) URL? - PullRequest
1 голос
/ 30 апреля 2020

Я попытался выполнить поиск в архивах, но ничего не помогло.

Мне нужно найти и заменить URL-адреса внутренних ссылок по всему сайту.

В исходном формате использовался

[ домен] / [родительская категория] / [подкатегория] / [возможная дополнительная подкатегория…] / [структура заголовка сообщения],

, в то время как новой структурой является [домен] / [заголовок публикации]

Чтобы усложнить ситуацию, это многоязычный веб-сайт, поэтому структура URL может быть либо [домен] ... или [домен] / it / ....

Мои навыки регулярных выражений действительно плохие. Кто-нибудь может предложить правильное выражение для определения [родительская категория] / [подкатегория] / [возможная дополнительная подкатегория…] / часть?

Заранее спасибо!

1 Ответ

0 голосов
/ 30 апреля 2020

Последовательность без / может быть записана как [^/]+, а / должен быть экранирован до \/. Возьмем это выражение:

^([^/]+\/?[^/]{2}?\/)(.*?)([^/]+)$

Будет соответствовать:

  • ^: начало последовательности
  • [^/]+: последовательность без sla sh
  • \/?: необязательный sla sh
  • [^/]{2}?: необязательный 2-значный символ (язык)
  • .*?: все (будет пропущено) - ленивый захват
  • [^/]+: строка без / - жадный захват
  • $: конец последовательности

Пример:

function convert(oldurl) {
  var m = oldurl.match(/^([^/]+\/?[^/]{2}?\/)(.*?)([^/]+)$/);
  if (m && m[3]) console.log(`${oldurl} -> ${m[1]}${m[3]}, removed: ${m[2]}`);
}

convert("domain.com/it/cat/sub/title1");
convert("domain.com/cat/sub/title2");
convert("domain.com/it/cat/title3");
convert("domain.com/title4");
...