Манипулируйте URL с помощью регулярных выражений вместо метода скольжения - PullRequest
0 голосов
/ 20 сентября 2019

По сути, у меня есть URL, который выглядит следующим образом:

http://www.my-site.com/topic1/topic2/topic3/topic4/topic5

, и я хочу сделать с ним 2 вещи:

1. check the structure and validate it
2. replace both topic3 and topic4 with a new parameters called topic6

ЭтоЭто мое решение на данный момент, но я заинтересован в создании чего-то более оптимизированного.

if ((url.match(/\//g) || []).length === 7) {
    const arr = url.split('/');
    const topic5 = arr.pop();
    arr.pop();
    arr.pop();
    arr.push('topic6', topic5);
    return arr.join('/');
}

Итак, как вы можете видеть, из-за того, что я не очень хорош в регулярных выражениях, я использовал другой подход, который не 'это выглядит хорошо.Я в основном проверяю количество / в строке, если tey равно 7, это означает, что структура URL хорошая и что для этого типа URL я должен применить следующие шаги.После этого я беру последний параметр URL, а также удаляю его, а затем после этого я удаляю последние 2 параметра и вместо этого добавляю новый вместе с topic5.

В случае, если у вас лучшеподход, пожалуйста, дайте мне знать.Я думаю, что это можно сделать, написав меньшее количество строк кода, но, как я уже сказал, я не очень знаком с регулярными выражениями.

1 Ответ

1 голос
/ 20 сентября 2019

Один из способов - использовать замену, чтобы сопоставить последние 3 с /, захватить только последнюю / часть в группе захвата и заменить на topics6 and value of captured group

enter image description here

let url = "http://www.my-site.com/topic1/topic2/topic3/topic4/topic5"

let func = (url) => {
  if ((url.match(/\//g) || []).length === 7) {
    const arr = url.replace(/(?:\/[^\/]+){2}(\/[^\/]+)$/, (m, g) => `\/topics6${g}`)
    return arr
  }
  return url
}

console.log(func(url))
...