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

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