js函数实现大括号匹配
大括号匹配的实现方法
大括号匹配通常指检查字符串中的 { 和 } 是否成对出现且嵌套正确。以下是几种实现方式:
使用栈数据结构
栈是解决括号匹配问题的经典方法。遍历字符串时,遇到左括号 { 入栈,遇到右括号 } 出栈,最后检查栈是否为空。
function isBalanced(str) {
const stack = [];
for (const char of str) {
if (char === '{') {
stack.push(char);
} else if (char === '}') {
if (stack.length === 0) return false;
stack.pop();
}
}
return stack.length === 0;
}
计数器简化版
如果不需要处理嵌套情况(如 {{}}),可以用计数器代替栈:
function isBalanced(str) {
let count = 0;
for (const char of str) {
if (char === '{') count++;
else if (char === '}') count--;
if (count < 0) return false;
}
return count === 0;
}
正则表达式递归匹配
对于复杂嵌套场景,可使用正则表达式递归匹配:
function isBalanced(str) {
const pattern = /{([^{}]*|(?R))*}/;
return pattern.test(str);
}
处理多类型括号扩展
如需同时匹配 {}, [], () 等多种括号:

function isBalanced(str) {
const map = { '{': '}', '[': ']', '(': ')' };
const stack = [];
for (const char of str) {
if (map[char]) {
stack.push(char);
} else if (char === '}' || char === ']' || char === ')') {
if (map[stack.pop()] !== char) return false;
}
}
return stack.length === 0;
}
注意事项
- 空字符串应返回
true - 非括号字符应被忽略
- 右括号出现在左括号前时立即返回
false - 时间复杂度一般为 O(n),空间复杂度为 O(n)(栈实现)或 O(1)(计数器)






