function check(s) { var open = ['(', '[', '{', '<']; var close = [')', ']', '}', '>']; var stack = []; for (var i=0; i=0) stack.push(s[i]); else { if (close.indexOf(s[i])>=0) { if (stack.length == 0) return false; var j = close.indexOf(s[i]); if (stack[stack.length-1] == open[j]) stack.pop(); else return false; } } } return (stack.length == 0); } s1 = '[{([[[<>]]])(<>)(){}}]'; s2 = ']()(){<>}[[()]]'; s3 = '[(sjd),"2"],{2:3}, [<>]'; s4 = '{[[[[((()))]]<]>]}'; console.log(check(s1)); // true console.log(check(s2)); // false console.log(check(s3)); // true console.log(check(s4)); // false