Lastindexof c что это
Перейти к содержимому

Lastindexof c что это

  • автор:

Метод 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() ) подстроки. Результатом возвращается логическое значение, определяющее наличие или отсутствие подстроки в начале/конце текста.

На следующем шаге мы продолжим изучение этого вопроса .

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *