Освоение сопоставления скобок в JavaScript: руководство по предотвращению синтаксических ошибок

В JavaScript правильное сопоставление скобок необходимо для обеспечения безошибочности кода и его правильной работы. Независимо от того, являетесь ли вы новичком или опытным разработчиком, понимание различных методов сопоставления скобок имеет решающее значение. В этой статье мы рассмотрим несколько подходов, которые помогут вам освоить сопоставление скобок в JavaScript, используя разговорный язык и примеры кода.

Метод 1: подход на основе стека
Один популярный метод сопоставления скобок — использование структуры данных стека. Идея состоит в том, чтобы поместить открывающие скобки в стек и извлечь их при обнаружении закрывающей скобки. Если стек в конце пуст, это означает, что все скобки сопоставлены правильно. Вот пример реализации:

function isBracketMatched(str) {
  const stack = [];
  for (let i = 0; i < str.length; i++) {
    if (str[i] === '(' || str[i] === '[' || str[i] === '{') {
      stack.push(str[i]);
    } else if (
      str[i] === ')' && stack[stack.length - 1] === '(' ||
      str[i] === ']' && stack[stack.length - 1] === '[' ||
      str[i] === '}' && stack[stack.length - 1] === '{'
    ) {
      stack.pop();
    } else if (str[i] === ')' || str[i] === ']' || str[i] === '}') {
      return false;
    }
  }
  return stack.length === 0;
}
console.log(isBracketMatched('({})')); // true
console.log(isBracketMatched('({}')); // false

Метод 2: регулярные выражения
Регулярные выражения также можно использовать для сопоставления скобок в JavaScript. Построив шаблон регулярного выражения, мы можем искать сбалансированные скобки в строке. Вот пример:

function isBracketMatched(str) {
  const pattern = /(\(\)|\[\]|\{\})/g;
  const matches = str.match(pattern);
  return matches !== null && matches.join('') === str;
}
console.log(isBracketMatched('({})')); // true
console.log(isBracketMatched('({}')); // false

Метод 3: рекурсивный подход
Для проверки соответствия скобок в строке можно использовать рекурсивную функцию. Путем многократного поиска пар внутренних скобок мы можем убедиться, что все скобки правильно сбалансированы. Вот пример реализации:

function isBracketMatched(str) {
  if (str.length === 0) {
    return true;
  }
  const openingBrackets = '([{';
  const closingBrackets = ')]}';
  const stack = [];
  for (let i = 0; i < str.length; i++) {
    if (openingBrackets.includes(str[i])) {
      stack.push(str[i]);
    } else if (closingBrackets.includes(str[i])) {
      const lastOpening = stack.pop();
      const expectedClosing = openingBrackets[closingBrackets.indexOf(str[i])];
      if (lastOpening !== expectedClosing) {
        return false;
      }
    }
  }
  return stack.length === 0;
}
console.log(isBracketMatched('({})')); // true
console.log(isBracketMatched('({}')); // false

Правильное сопоставление скобок имеет решающее значение для написания безошибочного кода JavaScript. В этой статье мы рассмотрели три метода: подход на основе стека, регулярные выражения и рекурсивный подход. У каждого метода есть свои преимущества, и вы можете выбрать тот, который соответствует вашему стилю кодирования и требованиям. Освоив методы сопоставления скобок, вы сможете лучше избегать синтаксических ошибок и писать более надежный код.