вариант (на скорую руку)
var text = '{a{b{c}d}e}f}g}';
var left = text.length;
var right = -1;
var arr = [];
while( ~( right = text.indexOf( '}', right + 1 ) ) &&
~( left = text.lastIndexOf( '{', left - 1 ) ) ) {
arr.push([
left, right + 1
]);
}
alert(
text.slice( arr[ 0 ][ 0 ], arr[ 0 ][ 1 ] ) + '\n' +
text.slice( arr[ 1 ][ 0 ], arr[ 1 ][ 1 ] ) + '\n' +
text.slice( arr[ 2 ][ 0 ], arr[ 2 ][ 1 ] )
);