Здравствуйте!
Стоит задача валидировать вложенные скобки (
({[) произвольной глубины вложенности. Причем может быть и так
({})[({})], это также валидный формат.
Написал:
function validBraces(braces) {
if (braces.length % 2 !== 0) {
return false;
}
var assoc = {
'(': ')',
'{': '}',
'[': ']'
};
for (var i = 0, m; i < Math.round(braces.length / 2); i += 1) {
if (!~Object.keys(assoc).indexOf(braces[i])) continue;
m = braces.match(RegExp('\\' + braces[i] + '(' + (braces[i] === braces[i + 1] ? '.' : '[^\\' + assoc[braces[i]] + ']') + '*)\\' + assoc[braces[i]]));
if (m === null || m[1].length % 2 !== 0) return false;
}
return true;
}
Он корректно мэтчит
({})[({})], но некорректно
(({{[[]]}})), причем во многих других случаях также корректно отрабатывает.
Подскажите пожалуйста, где я не прав и как бы вы реализовали задачу? Спасибо.