Это зависит от того, насколько произвольным является код внутри внешних фигурных скобок. Например, это возможности:
if (....) {
c = '{';
// this is a mismatched brace: {
}
Чтобы справиться с такими возможностями, вам, вероятно, потребуется нечто, анализирующее данный язык, а не регулярное выражение.