Есть массив из строк:
var massiv = [ "белый", "вкусный", "красное", "противное", "фиолетовая", "горькая" ]
Мы хотим отобрать из этого массива строки, которые заканчиваются на определённую последовательность символов. Как это сделать? Как получить все оканчивающиеся строки?
Видео
Что будем использовать?
Мы будем пользоваться методом filter() для объектов-прототипов Array. Мы будем пользоваться методом exec() для объектов-прототипов RegExp.
Нам нужно создать условие, которое будет возвращать true или false, когда мы будем сопоставлять конец строки под определённые последовательности символов.
Регулярное выражение оформляется символами / /(между наклонными линиями должен быть шаблон). В регулярных выражениях граница окончания строки обозначается знаком $. Это называется Утверждением (Assertion). Подобных Утверждений в языке JavaScript 8 штук.
Когда мы хотим найти последовательности до конца строки, то мы должны указать перед знаком $ нужные нам символы, так как мы хотим их видеть в строках.
Отбираем строки, заканчивающиеся на «ое»
Регулярное выражение будет выглядеть так:
/ое$/
Выполняем отбор элементов из массива со строками:
massiv.filter(i=>/ое$/.exec(i))
В ответ получаем новый массив с нужными нам строковыми элементами.
["красное", "противное"]
Как это работает?
На нашем массиве (massiv) мы вызываем через точку метод filter(). Этот метод создаст нам новый массив, не повреждая оригинальный. Фильтр пробегает по каждому элементу массива и проверяет условие отбора.
- Если условие отбора истинно — true, то фильтр закидывает этот элемент и его значение в новый массив.
- Если условие отбора ложно — false, то фильтр пропускает этот элемент и не добавляет его в новый массив.
Условием у нас является существование объекта, который вернёт нам метод exec(). Если отбор метода возвращает массив, тогда такой элемент попадёт в новый массив. Если возвращает null
, то не попадает в новый массив.
Другие примеры
Строки, заканчивающиеся на «ый»
massiv.filter(i=>/ый$/.exec(i)) (2) ["белый", "вкусный"]
Строки, заканчивающиеся на «ая»
massiv.filter(i=>/ая$/.exec(i)) (2) ["фиолетовая", "горькая"]
Информационные ссылки
Стандарт ECMAScript — Раздел «22.2.5.2 RegExp.prototype.exec ( string )» — https://tc39.es/ecma262/#sec-regexp.prototype.exec
Стандарт ECMAScript — Раздел «22.2.2.6 Assertion» — https://tc39.es/ecma262/#sec-assertion
Стандарт ECMAScript — Раздел «23.1.3.7 Array.prototype.filter ( callbackfn [ , thisArg ] )» — https://tc39.es/ecma262/#sec-array.prototype.filter