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

JavaScript如何解析嵌套方括号字符串为指定结构的结果数组

嵌套方括号分支字符串展开方案

问题复现

待处理的是嵌套方括号包裹的多分支结构,解析规则为:方括号内逗号分隔的内容为并列可选分支,需和括号外的前缀做全量拼接组合。

  • 原始输入字符串:
var raw = "GMYTEOR[RHE5DO,SG[A5D[CN[I,Q],EM[I,Q],M],E5D[C[NY,OA],O,Q],M5DC[MY,NA],U5DQ,Y5DCOA]]"
  • 预期输出结果数组:
const valid_results = [
    'GMYTEORRHE5DO',
    'GMYTEORSGA5DCNI',
    'GMYTEORSGA5DCNQ',
    'GMYTEORSGA5DEMI',
    'GMYTEORSGA5DEMQ',
    'GMYTEORSGA5DM',
    'GMYTEORSGE5DCNY',
    'GMYTEORSGE5DCOA',
    'GMYTEORSGE5DO',
    'GMYTEORSGE5DQ',
    'GMYTEORSGM5DCMY',
    'GMYTEORSGM5DCNA',
    'GMYTEORSGU5DQ',
    'GMYTEORSGY5DCOA',
]

此前尝试的JSON.parse、简单按方括号/逗号分割方案不可行,核心原因是这类方案没有维护嵌套层级的上下文关系,无法区分不同层级逗号、括号的作用范围。

实现方案

用栈维护层级上下文是处理这类嵌套结构最通用的方法,单次遍历字符串即可完成解析,无冗余计算,支持任意深度嵌套。

核心逻辑

逐字符扫描字符串,按遇到的字符类型做对应处理:

  • 普通字符:追加到当前正在拼接的分支片段末尾
  • `[`:进入新的嵌套层级,把当前层级的前缀集合压入栈保存,重置当前分支状态
  • `,`:当前并列分支拼接完成,存入当前层级的分支列表,重置分支状态准备处理下一个并列项
  • `]`:当前层级最后一个分支处理完成,弹出栈中保存的上层级上下文,把当前层所有分支结果作为上层级的拼接基础

可直接运行的代码

function parseBracketStr(str) {
  const stack = []
  let currentPrefix = ['']
  let segmentBuffer = ''

  for (const c of str) {
    if (c === '[') {
      stack.push({
        basePrefix: currentPrefix,
        branchList: []
      })
      currentPrefix = [...currentPrefix]
      segmentBuffer = ''
    } else if (c === ',') {
      const levelCtx = stack[stack.length - 1]
      currentPrefix.forEach(prefix => {
        levelCtx.branchList.push(prefix + segmentBuffer)
      })
      segmentBuffer = ''
      currentPrefix = [...levelCtx.basePrefix]
    } else if (c === ']') {
      const levelCtx = stack.pop()
      currentPrefix.forEach(prefix => {
        levelCtx.branchList.push(prefix + segmentBuffer)
      })
      currentPrefix = levelCtx.branchList
      segmentBuffer = ''
    } else {
      segmentBuffer += c
    }
  }

  return currentPrefix.map(p => p + segmentBuffer)
}

// 功能验证
const raw = "GMYTEOR[RHE5DO,SG[A5D[CN[I,Q],EM[I,Q],M],E5D[C[NY,OA],O,Q],M5DC[MY,NA],U5DQ,Y5DCOA]]"
console.log(parseBracketStr(raw)) // 输出与预期valid_results完全一致

方案说明

  • 实现时间复杂度为线性,字符串长度增加时解析效率不会明显下降
  • 不依赖复杂正则,逻辑边界清晰,后续如果需要支持转义字符、自定义分隔符等需求,只需要在字符判断分支添加对应逻辑即可
  • 不会出现简单分割方案常见的括号匹配错误、分支串接问题

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 22:21:46