А в чем смысл задумки? Почему сразу не передать?
ЗЫ:
3) взять строку между первой
Регулярными выражениями проблема сбалансированных скобок не решается впринципе. Чтобы понять о чем речь:

Код:
function foo(){ return "(parens((:-)".replace(/\((.)"/g; }
foo((a + b).toString(isNaN(b / a) + 8))).charAt(":(((((".indexOf("("));
//
Как вам такой вариант?
