如何提取字符串中最外层括号内的内容?
提取表达式中所有最外层括号内的内容
给定表达式 (2 + (4 - 2)) - (16 / 8),要提取所有最外层括号内的内容,核心是准确匹配成对的最外层括号——当遇到右括号且追踪栈为空时,说明当前是一个完整的最外层括号对。
实现思路
- 用栈存储左括号的索引,用于追踪括号的嵌套层级;
- 遍历字符串时,遇到左括号就将其索引压入栈;
- 遇到右括号时弹出栈顶的左括号索引:
- 若弹出后栈为空,说明当前右括号与刚弹出的左括号是一对最外层括号;
- 截取这对括号之间的子串(左括号索引+1到右括号索引),加入结果数组;
- 最终得到所有符合要求的内容。
完整代码实现
const str = "(2 + (4 - 2)) - (16 / 8)"; const result = []; const stack = []; for (let i = 0; i < str.length; i++) { if (str[i] === '(') { stack.push(i); } else if (str[i] === ')') { const leftIndex = stack.pop(); // 栈为空时,确认是最外层括号对 if (stack.length === 0) { result.push(str.substring(leftIndex + 1, i)); } } } console.log(result); // 输出: ['2 + (4 - 2)', '16 / 8']
代码说明
- 栈的作用是区分嵌套层级:内层括号的左括号会被压在栈顶,只有最外层右括号出现时,栈才会被弹空;
substring(leftIndex + 1, i)直接跳过最外层的左右括号,提取括号内的完整内容;- 该方法能正确处理嵌套括号场景,不会误将内层括号识别为最外层。
内容的提问来源于stack exchange,提问作者Casey Squeens
相关产品推荐
相关产品推荐

