Regex, aby policzyć liczbę przechwytywanych grup w wyrażeniu regularnym

Potrzebuję wyrażenia regularnego, które analizuje dowolne wyrażenie regularne (jako łańcuch), zwracając liczbę grup przechwytujących. Do tej pory mam ...

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

Który działa w niektórych przypadkach, gdzie założenie, że każda grupa, która zaczyna się znakiem zapytania, nie przechwytuje. Zlicza także puste grupy.

Nie działa w przypadku nawiasów zawartych w klasach znaków lub w nawiasach klamrowych i prawdopodobnie w innych scenariuszach.

questionAnswers(2)

yourAnswerToTheQuestion