manisha
@manisha

Как найти URL среди списка URL, если могут присутствовать динамические параметры?

const url = "/animals/15";

const urlList = ['/animals/cats', 'animals/details/subdetails/:id', '/animals/:id', 'smth/else', 'smth/else/:id/:type'];


Необходимо найти индекс элемента в массиве, который соответствует строке "animals/15". В данном случае этот индекс должен быть равен 2. Подскажите наиболее правильный вариант.
  • Вопрос задан
  • 61 просмотр
Решения вопроса 2
0xD34F
@0xD34F Куратор тега JavaScript
urlList.findIndex(n => RegExp(`^${n.replace(/:\w+/g, '\\w+')}$`).test(url))
Ответ написан
Seasle
@Seasle Куратор тега JavaScript
\( ゚ヮ゚)/
const url = "/animals/15";

const urlList = ['/animals/cats', 'animals/details/subdetails/:id', '/animals/:id', 'smth/else', 'smth/else/:id/:type'];

const matchURL = (url, list) => {
  const count = list.length;
  for (let index = 0; index < count; index++) {
    const template = list[index];
    const preparedTemplate = template.replace(/:(\w+)/g, '(?<$1>[^/]+)');
    const expression = new RegExp(`^${preparedTemplate}$`, 'gi');
    const match = expression.exec(url);
    
    if (match !== null) {
      return {
        index,
        url,
        template,
        params: match?.groups || {}
      };
    }
  }
  
  return null;
};

matchURL(url, urlList);
/*
{
  index: 2,
  url: '/animals/15',
  template: '/animals/:id',
  params: { id: '15' }
}
*/
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы
Artezio Нижний Новгород
от 130 000 до 180 000 ₽
Artezio Москва
от 160 000 до 220 000 ₽
Intspirit Краснодар
от 80 000 до 150 000 ₽
21 янв. 2021, в 14:45
3000 руб./за проект
21 янв. 2021, в 14:41
8000 руб./за проект