JavaScript | Как получить последнее русское слово из строки?

JavaScript | Как получить последнее русское слово из строки?

Есть строка:

"Маша едет на дорогой Lamborgini."

 

Решение с методом exec()

Для начала создадим класс символа, который будет описывать возможную букву русского алфавита:

[А-яЁё]

Для нахождения максимально длинной последовательности из таких классов символа мы воспользуемся квантификатором «+«, который будет находить в строке сопоставления класса символа от одного до бесконечности раз.

[А-яЁё]+

Так как стандартное сопоставление строки по шаблону регулярного выражения идёт слева-направо, то нас будет интересовать самое последнее возможное сопоставление.

Чтобы обозначить окончание строки, нужно воспользоваться утверждением, которое оформляется в виде символа доллара «$«.

Между нашим потенциальным русским словом и концом строки могут быть ДРУГИЕ символы, а могут и не быть. ДРУГИЕ символы — это все те, что нельзя назвать русскими буквами. Мы используем производство класса символа с отрицанием:

[^А-яЁё]

Теперь у нас могут быть всего 2 ситуации:

  1. Строка заканчивается русской буквой
  2. Строка НЕ заканчивается русской буквой

Оформить это условие сопоставления можно при помощи квантификатора «*«, который ищет варианты от нуля до бесконечности повторений.

[^А-яЁё]*

Мы будем использовать метод exec() для экземпляров регулярного выражения:

/([А-яЁё]+)[^А-яЁё]*$/.exec("Маша едет на дорогой Lamborgini.")[1]

Финальный штрих в получении нужного результата — это использование атома группы, который оформляется круглыми скобками «( )«. На этот раз метод exec() вернёт нам массив из двух целочисленных индексов. Под нулевым будет храниться общий результат сопоставления, а под первым — изолированный под задачу.

 

Получим:

"дорогой"

Скриншот:

Получили последнее русское слово из строки через метод exec - JavaScript
Получили последнее русское слово из строки через метод exec — JavaScript

 

Решение с методом [ @@match ]

Тот же самый результат можно получить при помощи выражения:

/([А-яЁё]+)[^А-яЁё]*$/[Symbol.match]("Маша едет на дорогой Lamborgini.")[1]
"дорогой"

Скриншот:

Получили последнее русское слово из строки через метод match - JavaScript
Получили последнее русское слово из строки через метод match — JavaScript

 

Информационные ссылки

Стандарт ECMAScript — Раздел «CharacterClass» — https://tc39.es/ecma262/#prod-CharacterClass

Стандарт ECMAScript — Раздел «Quantifier» — https://tc39.es/ecma262/#prod-Quantifier

Стандарт ECMAScript — Раздел «22.2.5.2 RegExp.prototype.exec ( string )» — https://tc39.es/ecma262/#sec-regexp.prototype.exec