@Spilygrim

Как ограничить количество совпадений одинаковых цифр в регулярном выражении?

Добрый день! Подскажите пожалуйста. Например: есть строка "777771999990005555551" и есть регулярное выражение /(.)\1*/g. Выражение ищет почти так, как мне нужно. То есть, находит цифру и любую её последовательность до следующей цифры. Но дело в том, что мне надо ограничить количество цифр которые "склеивает" регулярка не больше трёх. В примере выше есть шесть цифр 5 подряд. Мне нужно чтоб выражение разделило их на "555" и "555". И так с любой цифрой, если она идёт подряд больше 3 раз. Но есть ещё одно условие. В строке могут быть цифры 0, 7 и 9. У цифр 7 и 9 максимальная длина в строке может быть четыре => 7777 и 9999. Если последовательность больше, то её нужно "обрезать") Ещё есть 0. Независимо от длины его последовательности, его длина должна быть ровна одному. Например 000=> 0, 0, 0.
В итоге, строка "777771999990005555551" => 7777, 7, 1, 9999, 9, 0, 0, 0, 555, 555, 1.
Помогите пожалуйста это осуществить)
  • Вопрос задан
  • 133 просмотра
Решения вопроса 1
sergiks
@sergiks Куратор тега JavaScript
♬♬
Напоминалка
Количество задаётся в фигурных скобках {n,m}.
Например, /5{1,3}/ соответствует цифре 5 повторяющейся от 1 до 3 раз.
Жадно. Т.е. если можно взять три – возьмёт три. Подробнее про квантификаторы (указатели количества).

Решение
​const re = /(([1-68])\2{0,2}|([79])\3{0,3}|0)/g;

​"443777771999990005555551".match(re).join(', ')
// "44, 3, 7777, 7, 1, 9999, 9, 0, 0, 0, 555, 555, 1"

Расшифровка
В круглых скобках через вертикальную черту – варианты:
(A|B|C) == "A" ИЛИ "B" ИЛИ "C"

В квадратных скобках наборы символов:
[a-z] == любой один от "a" до "z"
В данном случае:
[1-68] == цифра от 1 до 6 или 8

\2 или например \3 – отсылка к ранее захваченному в круглых скобках фрагменту
/([79])\2{0,2}/ цифра 7 или 9. Сразу после неё – её же повтор от 0 до 2 раз. Т.е. в сумме это цифра 7 или 9, идущая до 3 раз подряд.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы