JavaScript | Квантификатор для последовательности символов — efim360.ru

JavaScript | Квантификатор для последовательности символов

Есть строка:

var stroka = "абв1 абвабв2 абвабвабв3 абвабвабвабв4"

Нам нужно найти те места в строке, в которых последовательности символов "абв" встречаются 3 раза подряд. Как это сделать?

 

Решение

Нам поможет метод replace() и регулярное выражение в качестве искомого значения. Чтобы "увидеть" результат сопоставления, мы будем заменять найденное значение на пустую строку.

stroka.replace(/(абв){3}/g,"")

Мы используем глобальный флаг, чтобы найти сопоставления по всей строке.

Применили квантификатор для последовательности символов - JavaScript
Применили квантификатор для последовательности символов - JavaScript

Мы получили строку:

"абв1 абвабв2 3 абв4"

Замены произошли на третьем и четвёртом слове. Мы воспользовались синтаксисом шаблона регулярного выражения, который называется Term. Он имеет 3 производства. В нашем случае мы использовали производство номер 3 - Atom Quantifier

Term номер 3 - ECMAScript
Term номер 3 - ECMAScript

 

Источник проблемы

Стандартное использование дизъюнкции внутри шаблона регулярного выражения приведёт к тому, что только левый символ от квантификатора будет искать сопоставление.

stroka.replace(/абв{3}/g,"")
Замены не произошло так как буква В не встречается 3 раза подряд
Замены не произошло так как буква В не встречается 3 раза подряд

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

Стандарт ECMAScript - Раздел "22.2.2.8 Atom"  - https://tc39.es/ecma262/#sec-atom

Стандарт ECMAScript - Раздел "22.1.3.17 String.prototype.replace ( searchValue, replaceValue )" - https://tc39.es/ecma262/#sec-string.prototype.replace

Поделись записью