el patrón
^\d{9}(?:,\d{9})+$ básicamente significa
coincidir 9 dígitos (\d{9}), seguido por la coincidencia de uno o más veces (signo + al final) del subpatrón (?:,\d{9}). el subpatrón en si significa lo mismo que el anterior, lo único que antes debe coincidir una coma (,). y la secuencia
?: es una instrucción que le dice al motor RegExp que no debe crear grupo de la subexpresión. esto último es opcional, según sea la necesidad. si lo eliminas, no hará diferencia en las coincidencias del patrón. la única diferencia es que algunas funciones podrían devolver más de un resultado.
ahora que lo vuelvo analizar, el patrón pudo haberse escrito así. el primer subpatrón
^\d{9}$ es redundante y se puede simplificar con el último subpatrón cambiando el cuantificador por asterísco (0 o más coincidencia):
Código:
/^\d{9}\-\d{9}$|^\d{9}(?:,\d{9})*$/