Grupos nomeados dentro de expressões regulares JavaScript
Vamos lembrar como usamos grupos de captura (capturing groups) na própria expressão regular:
let res = str.replace(/([a-z])\1/g, '!');
Às vezes, há situações em que é mais conveniente se referir a um grupo de captura não pelo seu número, mas pelo nome. Para isso, precisamos dar um nome ao grupo:
let res = str.replace(/(?<letra>[a-z])/g, '!');
Agora podemos nos referir a esse grupo
através da sintaxe \k<nome>, assim:
let res = str.replace(/(?<letra>[a-z])\k<letra>/g, '!');
Dada a string:
let str = '12:59:59 12:59:12 09:45:09';
Encontre todas as substrings de tempo em que a hora coincide com os segundos.