Algoritmo para criar um n-ésimo nível de padrões aninhados no RegEx

Como explicado emExpressões regulares podem ser usadas para combinar padrões aninhados?, não é possível criar regex para corresponder ao padrão aninhado arbitrário. Mas é possível criar um algoritmo que gere uma regex de n-ésimo nível de "nesteness"?

basicamente, eu quero substituirtrim(whatever) comrtrim(ltrim(whatever))

Eu consegui criar 3 níveis manualmente (sintaxe javascript):

<code>level[1] = /\(([^()]*)\)/g
level[2] = /\(((?:[^()]*\([^()]*\))*[^()]*)\)/g
level[3] = /\(((?:(?:(?:[^()]*\([^()]*\))*[^()]*)*\((?:(?:[^()]*\([^()]*\))*[^()]*)*\))*[^()]*)\)/g
</code>

Aqui estão alguns dados de teste:

<code>1st(ddd) + 1st(ddd)
2nd(dd(d))
3rd(a(b) + (cd(h) + d(dfas) + zzz))
4th(a(b(c(d))))
8th(a(b(c(d(e(f(g()))))))
</code>

Eu sei que em todos os níveis[^()]* precisa ser substituído por um grupo não capturado que pode conter parênteses, mas não sei comogeneralize o algoritmo para o n-ésimo nível...

questionAnswers(1)

yourAnswerToTheQuestion