В 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. В этой статье мы рассмотрели три метода: подход на основе стека, регулярные выражения и рекурсивный подход. У каждого метода есть свои преимущества, и вы можете выбрать тот, который соответствует вашему стилю кодирования и требованиям. Освоив методы сопоставления скобок, вы сможете лучше избегать синтаксических ошибок и писать более надежный код.