Где то так...
https://jsfiddle.net/DigitalBrain/azj0u01d/function js(text){
var i,
l=text.length,
char,
last,
stack=[];
for(i=0; i<l; i++){
char=text[i];
if(char=="{" || char=="("){
stack.push(char);
}else if(char=="}" || char==")"){
if(stack.length>0){
last=stack[stack.length-1];
if ((char == '}' && last == "{") || (char == ')' && last == '(')) {
stack.pop();
}
}
}
}
return stack.length==0;
}
console.info(js("function test(){ alert(); }")); // true
console.info(js("function test)({ alert(); }")); //false
Слегка оптимизировал
function js(text){
var i, l=text.length, char, last, stack=[];
for(i=0; i<l; i++){
char=text[i];
if(char=="{" || char=="("){
stack.push(char);
last=char;
}else if(char == '}' || char == ")"){
if(last){
if((char == '}' && last == "{") || (char == ')' && last == '('))
{
stack.pop();
last = stack.length > 0 ? stack[stack.length - 1] : undefined;
}
}else{
return false;
}
}
}
return stack.length==0;
}