Метод lastIndexOf
Метод lastIndexOf осуществляет поиск последнего вхождения подстроки в строке. При этом необходимо обращать внимание на указанный в первом параметре регистр символов. Поиск ведется с конца строки. Метод вернет позицию первого совпадения с конца, а если оно не найдено, то вернет -1 . Вторым необязательным параметром можно передать номер символа, откуда следует начинать поиск.
Синтаксис
строка.lastIndexOf(что ищем, [откуда начинать поиск]);
Пример
Давайте найдем позицию последнего вхождения подстроки:
let str = ‘ab cd cd cd ef’; let res = str.lastIndexOf(‘cd’); console.log(res);
Результат выполнения кода:
Пример
Давайте зададим позицию начала поиска:
let str = ‘ab cd cd cd ef’; let res = str.lastIndexOf(‘cd’, 8); console.log(res);
Результат выполнения кода:
Смотрите также
- метод startsWith ,
который проверяет начало строки - метод endsWith ,
который проверяет конец строки - метод indexOf ,
который ищет первое вхождение подстроки - метод includes ,
который ищет строку - метод at ,
который ищет символ строки
Array.prototype.lastIndexOf()
Метод lastIndexOf() возвращает последний индекс, по которому данный элемент может быть найден в массиве или -1, если такого индекса нет. Массив просматривается от конца к началу, начиная с индекса fromIndex .
Интерактивный пример
Синтаксис
arr.lastIndexOf(searchElement[, fromIndex = arr.length])
Параметры
Искомый элемент в массиве.
Необязательный параметр. Индекс, с которого начинать поиск в обратном направлении. Если индекс больше или равен длине массива, просматривается весь массив. Если индекс является отрицательным числом, он трактуется как смещение с конца массива. Обратите внимание: если индекс отрицателен, массив всё равно просматривается от конца к началу. Если рассчитанный индекс оказывается меньше 0, массив даже не просматривается. Значение по умолчанию равно длине массива, что означает, что просматривается весь массив.
Описание
Метод lastIndexOf() сравнивает искомый элемент searchElement с элементами в массиве, используя строгое сравнение (en-US) (тот же метод используется оператором === , тройное равно).
Примеры
Пример: использование lastIndexOf()
В следующем примере метод lastIndexOf() используется для поиска значений в массиве.
var array = [2, 5, 9, 2]; array.lastIndexOf(2); // 3 array.lastIndexOf(7); // -1 array.lastIndexOf(2, 3); // 3 array.lastIndexOf(2, 2); // 0 array.lastIndexOf(2, -2); // 0 array.lastIndexOf(2, -1); // 3
Пример: нахождение всех вхождений элемента
В следующем примере метод lastIndexOf() используется для поиска всех индексов элемента в указанном массиве, которые с помощью метода push() добавляются в другой массив.
var indices = []; var array = ["a", "b", "a", "c", "a", "d"]; var element = "a"; var idx = array.lastIndexOf(element); while (idx != -1) indices.push(idx); idx = idx > 0 ? array.lastIndexOf(element, idx - 1) : -1; > console.log(indices); // [4, 2, 0]
Обратите внимание, что мы обрабатываем случай idx == 0 отдельно, поскольку элемент всегда будет найден, независимо от параметра fromIndex , если он является первым элементом в массиве. Этим он отличается от метода indexOf() .
Полифил
Метод lastIndexOf() был добавлен к стандарту ECMA-262 в 5-м издании; поэтому он может отсутствовать в других реализациях стандарта. Вы можете работать с ним, добавив следующий код в начало ваших скриптов, он позволяет использовать lastIndexOf() в реализациях, которые не поддерживают этот метод. Этот алгоритм является точно тем, что описан в ECMA-262 5-го издания; он предполагает, что Object , TypeError , Number , Math.floor() , Math.abs() и Math.min() имеют свои первоначальные значения.
// Шаги алгоритма ECMA-262, 5-е издание, 15.4.4.15 // Ссылка (en): http://es5.github.io/#x15.4.4.15 // Ссылка (ru): http://es5.javascript.ru/x15.4.html#x15.4.4.15 if (!Array.prototype.lastIndexOf) Array.prototype.lastIndexOf = function (searchElement /*, fromIndex*/) "use strict"; if (this === void 0 || this === null) throw new TypeError(); > var n, k, t = Object(this), len = t.length >>> 0; if (len === 0) return -1; > n = len - 1; if (arguments.length > 1) n = Number(arguments[1]); if (n != n) n = 0; > else if (n != 0 && n != 1 / 0 && n != -(1 / 0)) n = (n > 0 || -1) * Math.floor(Math.abs(n)); > > for (k = n >= 0 ? Math.min(n, len - 1) : len - Math.abs(n); k >= 0; k--) if (k in t && t[k] === searchElement) return k; > > return -1; >; >
И снова обратите внимание, что данная реализация нацелена на абсолютную совместимость с методом lastIndexOf() , реализованным в Firefox и движке JavaScript SpiderMonkey, включая несколько случаев, которые являются спорными крайними случаями. Если вы используете этот код в реальных приложениях, вы можете вычислять параметр from менее сложным образом, игнорируя эти случаи.
Спецификации
| Specification |
|---|
| ECMAScript Language Specification # sec-array.prototype.lastindexof |
Совместимость с браузерами
BCD tables only load in the browser
Замечания по совместимости
- Начиная с Firefox 47, метод больше не будет возвращать -0 . Например, [0].lastIndexOf(0, -0) теперь всегда будет возвращать +0 (Firefox bug 1242043).
Смотрите также
- String.prototype.charAt()
- String.prototype.indexOf()
- String.prototype.split()
- Array.prototype.indexOf()
- Array.prototype.lastIndexOf()
Found a content problem with this page?
- Edit the page on GitHub.
- Report the content issue.
- View the source on GitHub.
This page was last modified on 27 нояб. 2023 г. by MDN contributors.
Your blueprint for a better internet.
MDN
Support
- Product help
- Report an issue
Our communities
Developers
- Web Technologies
- Learn Web Development
- MDN Plus
- Hacks Blog
- Website Privacy Notice
- Cookies
- Legal
- Community Participation Guidelines
Visit Mozilla Corporation’s not-for-profit parent, the Mozilla Foundation.
Portions of this content are ©1998– 2024 by individual mozilla.org contributors. Content available under a Creative Commons license.
String.prototype.lastIndexOf()
Метод lastIndexOf() возвращает индекс последнего вхождения указанного значения в строковый объект String , на котором он был вызван, или -1, если ничего не было найдено. Поиск по строке ведётся от конца к началу, начиная с индекса fromIndex .
Синтаксис
str.lastIndexOf(searchValue[, fromIndex])
Параметры
Строка, представляющая искомое значение.
Необязательный параметр. Местоположение внутри строки, откуда начинать поиск, нумерация индексов идёт слева направо. Может быть любым целым числом. Значение по умолчанию установлено в str.length . Если оно отрицательно, трактуется как 0. Если fromIndex > str.length , параметр fromIndex будет трактоваться как str.length .
Описание
Символы в строке идут слева направо. Индекс первого символа равен 0, а последнего символа в строке stringName равен stringName.length — 1 .
"канал".lastIndexOf("а"); // вернёт 3 "канал".lastIndexOf("а", 2); // вернёт 1 "канал".lastIndexOf("а", 0); // вернёт -1 "канал".lastIndexOf("ч"); // вернёт -1
Регистрозависимость
Метод lastIndexOf() является регистрозависимым. Например, следующее выражение вернёт -1:
"Синий кит, касатка".lastIndexOf("синий"); // вернёт -1
Примеры
Пример: использование методов indexOf() и lastIndexOf()
В следующем примере используются методы indexOf() и lastIndexOf() для нахождения значений в строке «Дивный новый мир» .
var anyString = "Дивный новый мир"; console.log( "Индекс первого вхождения «й» с начала строки равен " + anyString.indexOf("й"), ); // Отобразит 5 console.log( "Индекс первого вхождения «й» с конца строки равен " + anyString.lastIndexOf("й"), ); // Отобразит 11 console.log( "Индекс вхождения «новый» с начала строки равен " + anyString.indexOf("новый"), ); // Отобразит 7 console.log( "Индекс вхождения «новый» с конца строки равен " + anyString.lastIndexOf("новый"), ); // Отобразит 7
Спецификации
| Specification |
|---|
| ECMAScript Language Specification # sec-string.prototype.lastindexof |
Совместимость с браузерами
BCD tables only load in the browser
Смотрите также
- String.prototype.charAt()
- String.prototype.indexOf()
- String.prototype.split()
- Array.prototype.indexOf()
- Array.prototype.lastIndexOf()
Found a content problem with this page?
- Edit the page on GitHub.
- Report the content issue.
- View the source on GitHub.
This page was last modified on 20 янв. 2024 г. by MDN contributors.
Your blueprint for a better internet.
Lastindexof c что это
На этом шаге мы рассмотрим методы, используемые для организации происка в строке .
Существует большое количество методов, предназначенных для работы с текстовыми объектами. Эти методы позволяют выполнять самые разные операции со строками. Мы очень кратко обсудим наиболее важные и интересные методы.
Напомним, что текстовый объект изменить нельзя: после того как текстовый объект создан, содержащийся в нем текст не может быть изменен. Поэтому здесь и далее все операции, в которых упоминается изменение текста, следует понимать в том смысле, что на основе одного текстового объекта создается другой текстовый объект.
Методы, предназначенные для работы с текстом, условно можно разбить на несколько групп в соответствии с типом решаемой задачи. Так, есть методы для выполнения поиска в текстовой строке. Метод indexOf() позволяет выполнять поиск в текстовой строке символа или подстроки. Метод вызывается из объекта текстовой строки, в котором выполняется поиск. Символ или подстрока для поиска передаются аргументом методу. Результатом метод возвращает целое число — индекс первого вхождения в текстовую строку искомого фрагмента или символа. Если при поиске совпадение не найдено (искомая подстрока или символ отсутствуют в исходной текстовой строке), то метод возвращает значение -1. Методу можно передать второй целочисленный аргумент. Если так, то этот аргумент определяет индекс символа в строке, начиная с которого выполняется поиск. Третий необязательный целочисленный аргумент метода IndexOf() определяет количество элементов в строке, по которым выполняется поиск.
Метод LastIndexOf() похож на метод IndexOf() , но только поиск совпадений начинается с конца строки. Если аргументом методу LastIndexOf() передать подстроку или символ, то результатом метод возвращает индекс последнего вхождения данной подстроки или символа в текст, из которого вызван метод. В случае, если совпадений нет, метод возвращает значение -1. Второй необязательный целочисленный аргумент метода определяет индекс элемента, начиная с которого выполняется поиск совпадений. Поиск выполняется в обратном порядке — от конца в начало текста. Третий необязательный целочисленный аргумент определяет количество элементов, по которым выполняется поиск.
Методы IndexOfAny() и LastIndexOf Any() подобны методам IndexOf() и LastIndexOf() соответственно, но им первым аргументом передается символьный массив. А поиск выполняется на предмет совпадения хотя бы одного из символов из массива с символом в тексте, из которого вызывается метод. Небольшая иллюстрация к использованию методов IndexOf() и LastIndexOf() , IndexOfAny() и LastIndexOf Any() представлена в примере ниже.
using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace pr98_1 < class Program < static void Main() < // Текст, в котором выполняется поиск: String txt = "Итак, два плюс два и умножить на два равно шести"; // Отображение текстового значения: Console.WriteLine("Исходный текст:"); Console.WriteLine("\"\"", txt); // Текстовая строка для поиска: String str = "два"; // Отображение текстового значения: Console.WriteLine("Строка для поиска:"); Console.WriteLine("\"\"", str); // Переменная для записи значения индекса: int index; // Индекс первого вхождения строки в текст: index = txt.IndexOf(str); Console.WriteLine("Первое совпадение: ", index); // Индекс второго вхождения строки в текст: index = txt.IndexOf(str, index + 1); Console.WriteLine("Второе совпадение: ", index); // Индекс последнего вхождения строки в текст: index = txt.LastIndexOf(str); Console.WriteLine("Последнее совпадение: ", index); // Индекс для начала поиска и количество символов: int a = 7, b = 9; Console.WriteLine("Поиск с -го индекса по символам:", a, b); // Индекс первого вхождения строки на интервале: index = txt.IndexOf(str, a, b); Console.WriteLine("Совпадение на индексе: ", index); // Изменяем количество символов для поиска: b += 3; Console.WriteLine("Поиск с -го индекса по символам:", a, b); index = txt.IndexOf(str, a, b); Console.WriteLine("Совпадение на индексе: ", index); // Символ для поиска: char symb = 'а'; Console.WriteLine("Теперь ищем букву \'\'", symb); // Поиск первого совпадения: index = txt.IndexOf(symb); Console.WriteLine("Первое совпадение: ", index); // Поиск второго совпадения: index = txt.IndexOf(symb, index + 1); Console.WriteLine("Второе совпадение: ", index); // Последнее совпадение: index = txt.LastIndexOf(symb); Console.WriteLine("Последнее совпадение: ", index); // Предпоследнее совпадение: index = txt.LastIndexOf(symb, index - 1); Console.WriteLine("Предпоследнее совпадение: ", index); // Поиск на интервале: index = txt.IndexOf(symb, a, b); Console.WriteLine("Поиск на интервале индексов от до ", a, a + b - 1); Console.WriteLine("Первое совпадение на интервале: ", index); // Последнее совпадение на интервале: index = txt.LastIndexOf(symb, b, b + 1); Console.WriteLine("Поиск до индекса ", b); Console.WriteLine("Последнее совпадение на интервале: ", index); // Новый символ для поиска: symb = 'ы'; Console.WriteLine("Ищем букву \'\'", symb); // Поиск первого совпадения: index = txt.IndexOf(symb); Console.WriteLine("Первое совпадение: ", index); // Массив с буквами для поиска: char[] s = 'ы','а','д'>; // Отображение символов для поиска: Console.Write ("Ищем букву \'\'", s[0]); for(int k = 1; k < s.Length-1; k++) < Console.Write(", \'" + s[k] + "\'"); > Console.WriteLine(" или \'" + s[s.Length - 1]+"\':"); // Первое совпадение: index = txt.IndexOfAny(s); Console.WriteLine("Первое совпадение: ", index); // Второе совпадение: index = txt.IndexOfAny(s, index + 1); Console.WriteLine("Второе совпадение: ", index); // Последнее совпадение: index = txt.LastIndexOfAny(s); Console.WriteLine("Последнее совпадение: ", index); Console.WriteLine("Поиск на интервале индексов от до ", a, a + b - 1); // Первое совпадение на интервале: index = txt.IndexOfAny(s, a, b); Console.WriteLine("Первое совпадение на интервале: ", index); // Последнее совпадение на интервале: index=txt.LastIndexOfAny(s, a + b - 1, b); Console.WriteLine("Последнее совпадение на интервале: ", index); // Задержка: Console.ReadLine(); > > >
Архив проекта можно взять здесь.
Результат выполнения программы такой.
Рис.1. Поиск по тексту
В программе текст, в котором выполняется поиск подстрок и символов, записывается в переменную txt (значением является литерал «Итак, два плюс два и умножить на два равно шести» ). В переменную stг записывается текст «два» . Это строка, которую мы будем искать в тексте. Для записи значения индекса, определяющего позицию строки или символа в тексте, объявляется целочисленная переменная index .
Первое значение переменной index присваивается командой
index = txt.IndexOf(str); .
Это индекс первого вхождения строки str в текст из переменной txt (значение 6). После выполнения команды
index = txt.IndexOf(str, index + 1);
переменная index получает значение 15. Значение выражения txt.IndexOf (str, index + 1) — это индекс первого вхождения строки str в текст txt , начиная с индекса index + 1 включительно. На предыдущем этапе в переменную index был записан индекс первого вхождения строки str в текст txt , если искать с самого начала текста. Значит, следующее совпадение — второе по счету.
index = txt.LastIndexOf(str);
в переменную вычисляется индекс последнего вхождения строки str в текст txt (значение 33).
Далее мы используем две целочисленные переменные (переменная а со значением 7 и переменная b со значение 9). Переменные используются в команде
index = txt.IndexOf(str, a, b); .
Значение переменной index после этой команды — индекс первого включения строки str в текст txt , если поиск начинать с индекса со значением а (индекс 7), причем поиск ограничен количеством символов, определяемых значением переменной b (просматривается 9 символов). Получается, что поиск идет по тексту «ва плюс д» , в котором нет строки «два» . Поэтому метод IndexOf() возвращает значение -1. А вот если мы проделаем ту же операцию, предварительно увеличив значение переменной b на 3 (новое значение этой переменной равно 12), то поиск строки «два» будет выполняться в тексте «ва плюс два » . Такая строка в тексте есть.
Индекс, определяющий позицию строки, определяется на основе всего текста из переменной txt . Получается значение 15.
В символьную переменную symb записывается символ ‘а’ , который мы будем искать в тексте txt . Первое появление буквы в тексте определяется индексом, который вычисляется командой
index=txt.IndexOf(symb); .
В тексте из переменной txt буква ‘а’ первый раз встречается на третьей позиции (индекс на единицу меньше и равен 2). Индекс позиции, где буква ‘а’ появляется второй раз, вычисляется командой
index = txt.IndexOf(symb, index + 1);
(переменная index получает значение 8).
Индекс позиции, в которой имеет место последнее вхождение символьного значения переменной symb в текст txt , вычисляем командой
index = txt.LastIndexOf(symb);
и получаем значение 38. Индекс предпоследней позиции буквы ‘а’ (значение переменной symb ) вычисляется командой
index = txt.LastIndexOf(symb, index - 1); .
Здесь мы учли, что текущее (до выполнения команды) значение переменной index — эго индекс позиции, в которой буква ‘а’ появляется последний раз. Следовательно, индекс предыдущей буквы в тексте txt равен index — 1 . Метод LastIndexOf() выполняет поиск в направлении начала текста. Поэтому искать индекс предпоследней позиции буквы ‘а’ в тексте нужно, начиная с позиции с индексом index — 1 . Предпоследняя позиция буквы ‘а’ в тексте из переменной txt определяется индексом со значением 35.
index = txt.IndexOf(symb, а, b);
вычисляется индекс позиции буквы ‘а’ (значение переменной symb ) в тексте txt , начиная с позиции с индексом 7 (значение переменной а ), и проверяется 12 символов (значение переменной b ).
Если поиск начинается с символа в позиции с индексом а , а количество проверяемых символов равно b , то это означает, что поиск выполняется на интервале индексов от а до a + b — 1 включительно. Для значений 7 и 12 для переменных а и b получаем интервал индексов от 7 до 18 включительно.
При выполнении команды
index = txt.LastIndexOf(symb, b, b + 1);
вычисляется индекс последнего (от начала текста) вхождения буквы, являющейся значением переменной symb , в текст из переменной txt , причем поиск выполняется в направлении начала текста от позиции с индексом, определяемым значением переменной b (значение 12). В итоге переменная index получает значение 8 (такое же, как было до этого).
Если символ находится на позиции с индексом b , то от начала текста до этого символа всего находится b + 1 символов. При выполнении инструкции txt.LastIndexOf (symb, b, b + 1) текст из переменной txt просматривается на предмет наличия в нем символа, являющегося значением переменной symb . Текст просматривается, начиная с символа с индексом, определяемым значением второго аргумента b метода LastIndexOf() . Текст просматривается в направлении к началу текста, до первого совпадения. Первое совпадение с конца — это последнее совпадение с начала. Количество символов, которые просматриваются, определяется третьим аргументом метода LastIndexOf() . Значение этого аргумента b + 1 (при значении второго аргумента b ) означает, что просматриваются все символы до начала текста.
Затем переменной symb присваивается новое значение ‘ы’ , и командой
index = txt.IndexOf(symb);
вычисляется индекс первого вхождения буквы ‘ы’ в текст из переменной txt . Но поскольку такой буквы в тексте нет, то переменная index получает значение -1.
Наконец, мы объявляем и инициализируем символьный массив s , состоящий из трех элементов (буквы ‘ы’ , ‘а’ и ‘д’ ). В результате выполнения команды
index = txt.IndexOfAny(s);
вычисляется индекс первого вхождения любой из перечисленных букв в текст txt. Буквы ‘ы’ , как мы уже знаем, в тексте нет совсем. Буква ‘а’ в тексте из переменной txt впервые встречается в позиции с индексом 2. Буква ‘д’ первый раз встречается в позиции с индексом 6. То есть буква ‘а’ встречается раньше всех прочих букв из массива s . Следовательно, переменная index получает значение 2. Командой
index=txt.IndexOfAny(s, index + 1);
вычисляется индекс второго вхождения в текст txt любой из букв из массива s . По факту выполняется поиск первого вхождения букв из массива s в текст txt , начиная с индекса index + 1 . Так получается, что это индекс 6.
При выполнении команды
index = txt.LastIndexOfAny(s);
вычисляется индекс последнего вхождения в текст из переменной txt букв из массива s . Получаем значение 38 (последнее вхождение буквы ‘а’ ).
index = txt.IndexOfAny(s, a, b);
вычисляется первое вхождение в текст txt букв из массива s , начиная с индекса, определяемого переменной а (значение 7), и проверяются символы в тексте в количестве, определяемом значением переменной b (значение 12). Другими словами, исследуется (на предмет наличия совпадений) интервал индексов от 7 до 18 включительно (от а до а + b — 1 ). Получаем значение 8 для переменной index .
index=txt.LastIndexOfAny(s, a + b - 1, b);
используется для вычисления последнего вхождения букв из массива s в текст из переменной txt , причем поиск начинается с элемента с индексом а + b — 1 (значение 18) и выполняется в направлении к началу текста по 12 символам (значение переменной b ). То есть речь идет все о том же диапазоне индексов от 7 до 18 включительно. Переменная index получает значение 17 (индекс последнего вхождения буквы ‘а’ в указанном выше интервале).
Метод Contains() позволяет проверить, содержится ли подстрока в строке. Метод вызывается из объекта текста, в котором проверяется наличие подстроки. Подстрока передается аргументом методу. Результатом возвращается логическое значение (тип bool ): значение true — если подстрока содержится в тексте, и значение false — если подстрока не содержится в тексте.
Методы StartsWith() и EndsWith() позволяют проверить, начинается или заканчивается текст определенной подстрокой. Подстрока передается аргументом, а соответствующий метод вызывается из текстового объекта, который проверяется на наличие в начале (метод StartsWith() ) или конце (метод EndsWith() ) подстроки. Результатом возвращается логическое значение, определяющее наличие или отсутствие подстроки в начале/конце текста.
На следующем шаге мы продолжим изучение этого вопроса .