Regex para contar o número de grupos de captura em um regex
Eu preciso de um regex que examine o regex arbitrário (como uma string), retornando o número de grupos de captura. Até agora eu tenho ...
arbitrary_regex.toString().match(/\((|[^?].*?)\)/g).length
O que funciona para alguns casos, em que a suposição de que qualquer grupo que comece com um ponto de interrogação esteja sendo não capturado. Também conta grupos vazios.
Ele não funciona para colchetes incluídos em classes de caracteres, ou colchetes com escape e, possivelmente, alguns outros cenários.