@Aleksandr2208

Регуляркой получить значения параметра url для дальнейшего взаимодействия?

Есть урлы:
sitename.net/somedirectory/14545
sitename.net/somedirectory/14545/count-1145
sitename.net/somedirectory/14545/specific-345
sitename.net/somedirectory/14545/count-1145/specif...

14545 - это id он числовой и может быть любым числом
count-1145 - где count некий параметр а 1145 его id(может быть любым числом)
specific-345 - где specific некий параметр а 345 его id(может быть любым числом)

Задача получать, если они есть в урле, параметры count и specific
для дальнейшей манипуляции с урлом в зависимости от условия через window.location
необходимо учесть возможность задать/убрать как по одному параметру так и сразу 2
  • Вопрос задан
  • 160 просмотров
Решения вопроса 1
0xD34F
@0xD34F Куратор тега JavaScript
const urls = [
  'http://sitename.net/somedirectory/14545/',
  'http://sitename.net/somedirectory/14545/count-1145',
  'http://sitename.net/somedirectory/14545/specific-345',
  'http://sitename.net/somedirectory/14545/count-1145/specific-345',
];

const getParams = (url, params) =>
  params instanceof Array && params.length
    ? (url.match(RegExp(`(${params.join('|')})-\\d+`, 'g')) || [])
        .map(n => n.split('-'))
        .reduce((acc, n) => (acc[n[0]] = n[1], acc), {})
    : {};

const params = urls.map(n => getParams(n, [ 'count', 'specific' ]));

или, если надо получать все, которые есть, без указания конкретных имён:

const getParams = url =>
  Object.fromEntries((url
    .match(/[a-z]+-\d+/g) || [])
    .map(n => n.split('-'))
  );
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
@choupa
Архитектор (обычный, который строит)
count = myURL.match( /count-(\d+)/ )[ 1 ];
specific = myURL.match( /specific-(\d+)/ )[ 1 ];
Ответ написан
sinneren
@sinneren
это не решение, но в таком направлении надо думать
/^\/somedirectory\/([\d]+)(\/?)(count-([\d]+))(.*)$/
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы