You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

正则表达式挑战:匹配指数级深度的嵌套括号

解决深度嵌套括号的最深层内容匹配问题

你的现有正则/\(([^()]+)\)/只能匹配最内层的单个括号对,默认只返回第一个匹配结果(示例中的(A))。要提取嵌套层数最深的内容(比如示例中的C),可以用以下两种方案:

方案一:提取所有最内层内容后筛选最深项

这种方法兼容所有JS环境,核心思路是先捕获所有最内层括号的内容,再统计每个内容对应的嵌套层数,最终筛选出层数最多的项。

const regex = /\(([^()]+)\)/g;
const text = "(((A))) (((((B))))) (((((((C)))))))";
const matchInfos = [];
let currentMatch;

// 遍历所有最内层括号匹配项,记录内容和对应嵌套深度
while ((currentMatch = regex.exec(text)) !== null) {
  // 计算当前匹配项左侧的左括号数量,加1得到总嵌套层数
  const leftBracketCount = text.slice(0, currentMatch.index).split('(').length - 1;
  matchInfos.push({
    content: currentMatch[1],
    depth: leftBracketCount + 1
  });
}

// 找到深度最大的内容
const deepestContent = matchInfos.reduce((maxItem, currItem) => 
  currItem.depth > maxItem.depth ? currItem : maxItem, 
  matchInfos[0]
).content;

console.log(deepestContent); // 输出:C

方案二:用递归正则匹配完整最深嵌套结构(ES2018+)

如果你的运行环境支持ES2018及以上的递归正则特性,可以直接匹配完整的嵌套括号结构,再从中提取最深层内容:

// 匹配任意深度的完整嵌套括号结构
const nestedRegex = /\((?:[^()]|(?R))+\)/g;
const text = "(((A))) (((((B))))) (((((((C)))))))";
let longestMatch = '';
let currentMatch;

// 找出最长的嵌套结构(即层数最深的)
while ((currentMatch = nestedRegex.exec(text)) !== null) {
  if (currentMatch[0].length > longestMatch.length) {
    longestMatch = currentMatch[0];
  }
}

// 提取最深嵌套结构中的核心内容
const content = longestMatch.match(/\(([^()]+)\)/)[1];
console.log(content); // 输出:C

关键说明

  • 传统正则不支持直接匹配任意深度的嵌套,但可以通过匹配最内层无括号的括号对间接处理,因为无论外层嵌套多少层,最内层的结构都是(内容)且内容不含括号。
  • 方案一适配所有环境,方案二依赖ES2018的递归正则特性(现代浏览器、Node.js 10+均支持)。

内容的提问来源于stack exchange,提问作者prabu naresh

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.11 18:35:05