Напоминалка
Количество задаётся в фигурных скобках
{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 раз подряд.