@westdp

Как определить, содержит ли url определенное слово?

Как определить, содержит ли url определенное слово?

Например есть ли в урле https://learn.javascript.ru/json - json или https://learn.javascript.ru/python - python??
Если да сделать это?
  • Вопрос задан
  • 7175 просмотров
Решения вопроса 5
@holfza
"https://learn.javascript.ru/python".indexOf('python') > -1 //true
Ответ написан
Комментировать
IonDen
@IonDen
JavaScript developer. IonDen.com
1. Location.href
2. Проверка строки регуляркой, например с помощью test
Ответ написан
Комментировать
drugoi
@drugoi
Front-end Developer
if (/json/.test(location.href)) {
  console.info('Ссылка содержит слово json');
} else {
  console.info('Ссылка не содержит слово json');
}
Ответ написан
Комментировать
@dmitryKovalskiy
программист средней руки
Разбирайте объект location. В частности location.href
Ответ написан
BuriK666
@BuriK666
Компьютерный псих
if (document.location.href.indexOf('json') == -1) {
  // не содержит
} else {
  // содержит
}
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
Fortoo
@Fortoo
Top-Web OpenCart
Для примера возмём адрес https://learn.javascript.ru/json
В данном случае location.href вернёт строку.
console.log(window.location.href.indexOf('json'));
// получим цифру 28


Метод indexOf() ищет в массиве или строке совпадение и возвращает цифру ( начиная с нуля, количество символов до искомого значения), т.е. вернётся индекс первого найденного элемента или -1, если ничего не нашлось.
Искомый "json" начинается с 29 буквы, но учитывая что отчёт начинается с 0, поэтому 28 буква.

'Hello, world!'.indexOf('world'); // 7
'Hello, world!'.indexOf('o');     // 4, в конце hello
'Hello, world!'.indexOf('o', 5);  // 8, вторая буква в world
!!'Hello, world!'.indexOf('z');   // true, отрицательное число приводится к true
!!'Hello, world!'.indexOf('H');   // false, 0 трактуется как false

Это древний метод indexOf(), для таких задач лучше использовать метод includes() .

Раньше методом indexOf() часто проверяли, есть ли элемент в массиве. Эта задача проще, индекс здесь не нужен, но других методов для этого не было.

Поэтому в старых скриптах можно увидеть такой код:
const guestList = ['Петя', 'Настя', 'Артур', 'Лена', 'Настя', 'Эммануил']
const guest = // получаем откуда-нибудь имя гостя

if (guestList.indexOf(guest) >= 0) {
  // пускаем на вечеринку
} else {
  // отправляем домой
}


Из-за того, что indexOf() возвращает индекс, в условии обязательно нужна проверка (>= 0 или !== -1).
Если так не сделать, то появится неприятный баг: мы будем пускать на вечеринку всех, кроме первого гостя в списке.

Дело в том, что JavaScript интерпретирует ненулевые числа как истину (true) и будет запускать первую ветку if.
А на первом госте indexOf() вернёт 0, что считается ложным (false), и наш скрипт не пустит человека на вечеринку.

Метод lastIndexOf() начинает поиск с конца.
Метод test() тоже хорош, просто проверит, подходит ли искомая строка под регулярное выражение.

Отличие метода includes()(добавлен в ECMAScript в 2016г) от метода indexOf() заключается в том, что он возвращает логическое значение (true, или false), а не числовое значение (индекс элемента, или -1, если элемент не найден).
Кроме того, очень незначительным отличием includes() является то, что он правильно обрабатывает NaN в отличие от indexOf/lastIndexOf.

Я предпочитаю так:
if (window.location.href.includes('json')) {
    // содержит
} else {
    // не содержит
}
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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