lastIndexOf() в JavaScript

lastIndexOf() ищет последнее вхождение текста в строке и возвращает его индекс.

let text = 'кот и кот';

console.log(text.lastIndexOf('кот'));

Результат:

6

В строке два слова ‘кот’. Метод вернул индекс второго, потому что это последнее совпадение.

Что такое lastIndexOf()

lastIndexOf() - это метод строки. Он ищет текст с конца строки и возвращает индекс найденного совпадения.

let message = 'one two one';

console.log(message.lastIndexOf('one'));

Результат:

8

Первое ‘one’ находится с индекса 0, но метод вернул индекс последнего совпадения.

Синтаксис

Основная запись выглядит так:

string.lastIndexOf(searchString);

searchString - текст, который нужно найти.

let fileName = 'archive.final.zip';

console.log(fileName.lastIndexOf('.'));

Результат:

13

Метод нашел последнюю точку в имени файла.

Поиск последнего совпадения

lastIndexOf() полезен, когда в строке есть несколько одинаковых фрагментов, а нужен последний.

let path = '/users/admin/profile';

console.log(path.lastIndexOf('/'));

Результат:

12

Последний слеш стоит перед словом ‘profile’.

После этого индекс можно использовать, например, чтобы получить часть строки.

let path = '/users/admin/profile';
let slashIndex = path.lastIndexOf('/');

console.log(path.slice(slashIndex + 1));

Результат:

profile

Если совпадений нет

Если искомого текста в строке нет, lastIndexOf() возвращает -1.

let text = 'JavaScript';

console.log(text.lastIndexOf('Python'));

Результат:

-1

Это поведение такое же, как у indexOf().

Регистр имеет значение

lastIndexOf() учитывает регистр букв.

let text = 'JavaScript javascript';

console.log(text.lastIndexOf('JavaScript'));
console.log(text.lastIndexOf('javascript'));

Результат:

0
11

Для JavaScript это разные строки, потому что первая начинается с большой буквы, а вторая - с маленькой.

Поиск с позиции

Вторым аргументом можно указать позицию, откуда начинать поиск назад.

string.lastIndexOf(searchString, position);

Например, найдем последнее слово ‘two’ не во всей строке, а только до индекса 10.

let text = 'one two one two';

console.log(text.lastIndexOf('two'));
console.log(text.lastIndexOf('two', 10));

Результат:

12
4

Без второго аргумента метод нашел последнее ‘two’. С позицией 10 поиск пошел назад и нашел первое ‘two’.

lastIndexOf() и indexOf()

indexOf() возвращает первое совпадение, а lastIndexOf() - последнее.

let text = 'кот и кот';

console.log(text.indexOf('кот'));
console.log(text.lastIndexOf('кот'));

Результат:

0
6

Если совпадение в строке только одно, оба метода вернут одинаковый индекс.

let text = 'кот';

console.log(text.indexOf('кот'));
console.log(text.lastIndexOf('кот'));

Результат:

0
0

Проверка повторов

Если нужно понять, встречается ли символ или слово больше одного раза, можно сравнить результат indexOf() и lastIndexOf().

let value = '10,20,30';

console.log(value.indexOf(',') !== value.lastIndexOf(','));

Результат:

true

Первая и последняя запятая находятся на разных позициях, значит запятых в строке больше одной.

Итого

lastIndexOf() ищет последнее вхождение текста в строке.

  • Метод возвращает индекс последнего совпадения.
  • Если совпадения нет, возвращается -1.
  • Регистр букв влияет на результат поиска.
  • Вторым аргументом можно указать позицию, откуда начинать поиск назад.
  • indexOf() ищет первое совпадение, а lastIndexOf() - последнее.