Regex para contar el número de grupos de captura en una expresión regular

Necesito una expresión regular que examine expresiones regulares arbitrarias (como una cadena), devolviendo el número de grupos de captura. Hasta ahora tengo ...

arbitrary_regex.toString().match(/\((|[^?].*?)\)/g).length

Lo que funciona para algunos casos, donde la suposición de que cualquier grupo que comience con un signo de interrogación no es de captura. También cuenta con grupos vacíos.

No funciona para los corchetes incluidos en las clases de caracteres, ni los corchetes escapados, y posiblemente algunos otros escenarios.

Respuestas a la pregunta(2)

Su respuesta a la pregunta