Dim@, я постараюсь объяснить. Вы понимаете как работают обратные ссылки? Они ловят ту же подстроку, которая была поймана в захватывающие скобки с указанным порядковым номером.
/
(.+) // ловит несколько звёдочек (допустим, n)
(?=\1* // количество звёздочек, кратное n, \1 ловит ту же подстроку, которая была захвачена в (.+)
, //символ запятая
\1+ //количество звёздочек, кратное n
$ //конец входящей строки
/
Следовательно, поиск удаётся только когда n является общим делителем количества звёздочек слева и справа от запятой. Поскольку использовался жадный квантификатор, то интерпретатор остановился на наибольшем общем делителе указанных чисел.
(.+) действительно вначале проверяет всю входящую строку, но дальше поиск не удаётся, поэтому постепенно сокращает количество в квантификаторе.