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

    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 раз подряд.
    Ответ написан
    6 комментариев