Obtener índice de cada captura en una expresión regular de JavaScript

Quiero hacer coincidir una expresión regular como/(a).(b)(c.)d/ con"aabccde", y recuperar la siguiente información:

"a" at index = 0
"b" at index = 2
"cc" at index = 3

¿Cómo puedo hacer esto? String.match devuelve la lista de coincidencias y el índice del inicio de la coincidencia completa, no el índice de cada captura.

Edición: un caso de prueba que no funcionaría con indexOf simple

regex: /(a).(.)/
string: "aaa"
expected result: "a" at 0, "a" at 2

Nota: La pregunta es similar aJavascript Regex: ¿Cómo encontrar el índice de cada subexpresión?, pero no puedo modificar la expresión regular para hacer de cada subexpresión un grupo de captura.

Respuestas a la pregunta(6)

Su respuesta a la pregunta