Показать сообщение отдельно
  #15 (permalink)  
Старый 13.10.2019, 18:24
Аватар для Alexandroppolus
Профессор
Отправить личное сообщение для Alexandroppolus Посмотреть профиль Найти все сообщения от Alexandroppolus
 
Регистрация: 25.10.2016
Сообщений: 1,005

var config = {
  '(': ')',
  '{': '}',
  '[': ']',
  '<': '>',
  '*': '*',
  '#': '#'
};

function checkParentheses(config, str) {
  if (!str || !config) { return true; }
  var stack = [];
  var closeChars = Object.create(null);
  Object.keys(config).forEach(function(open) {
    var close = config[open];
    closeChars[close] = open !== close;
  });
  for (var i = 0; i < str.length; ++i) {
    var char = str.charAt(i);
    var isClose = closeChars[char];
    var closeForChar = config[char];
    if (isClose) {
      if (!stack.length || stack.pop() !== char) {
        return false;
      }
    } else if (closeForChar) {
      stack.push(closeForChar);
    }
    if (char === closeForChar) {
      closeChars[char] = !closeChars[char];
    }
  }
  return !stack.length;
}

alert(checkParentheses(config, '(aaa*hjhg*)'));
alert(checkParentheses(config, '(aaa*hjhg)'));


Добавить новые символы будет нетрудно. Если открывашка совпадает с закрывашкой, то режим для символа переключается, начинаясь с открывашки
Ответить с цитированием