O método exec em expressões regulares JavaScript

O método exec realiza uma busca em uma string. O resultado retornado é a substring encontrada e seus grupos de captura (capturing groups). Cada chamada subsequente deste método iniciará a busca a partir do ponto onde a substring anterior foi encontrada.

Vamos ver um exemplo. Suponha que temos a seguinte string:

javascriptlet str = '12 34 56';

Suponha que temos a seguinte expressão regular:

javascriptlet reg = /\d+/g;

Vamos chamar sequencialmente nosso método para nossa string:

javascriptlet res1 = reg.exec(str);
console.log(res1[0]); // 12

let res2 = reg.exec(str);
console.log(res2[0]); // 34

let res3 = reg.exec(str);
console.log(res3[0]); // 56

Após três chamadas, como não há mais correspondências na nossa string com a expressão regular, a próxima chamada do método retornará null:

javascriptlet res4 = reg.exec(str);
console.log(res4); // null

Esta característica do método é conveniente de ser usada em um loop:

javascriptlet str = '12 34 56';
let reg = /\d+/g;

let res;
while (res = reg.exec(str)) {
  console.log(res); // [12], [34], [56] 
}

É possível encontrar não apenas a correspondência, mas também decompor ela em grupos de captura:

javascriptlet str = '12 34 56';
let reg = /(\d)(\d)/g;

let res;
while (res = reg.exec(str)) {
  console.log(res); // [12, 1, 2], [34, 3, 4], [56, 5, 6] 
}
Задание 1

Dada a seguinte string:

javascriptlet str = '12:37:57 15:48:58 17:59:59';

Encontre nela todas as substrings com horário e para cada uma encontrada, decomponha as horas, minutos e segundos em grupos de captura.