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

如何将固定分组格式的纯文本转换为包含数组的结构化对象?

固定格式纯文本转结构化对象实现方案

核心逻辑为逐行解析文本,识别分组边界后归集对应子项,时间复杂度为O(n)(n为文本行数),适配任意长度的符合结构要求的输入:

  • 预处理:将输入文本按换行符拆分,过滤空行避免空白内容干扰
  • 初始化:声明空结果对象,以及记录当前激活分组的变量
  • 逐行遍历处理:
    • 用正则匹配[父组名]格式的分组标记,匹配成功则提取原始组名,按需求转换为驼峰格式作为结果对象的key,同时为该key初始化空数组,更新当前激活分组
    • 未匹配到分组标记时,若当前存在激活分组,将该行内容加入对应分组的数组中
  • 遍历完成后直接返回结果对象即可

JavaScript 实现代码示例

function parseGroupText(text) {
  // 拆分文本并过滤空行
  const lines = text.split('\n').filter(line => line.trim() !== '');
  const result = {};
  let currentGroup = null;
  // 匹配分组标记的正则
  const groupRegex = /^\[(.+)\]$/;

  for (const line of lines) {
    const groupMatch = line.match(groupRegex);
    if (groupMatch) {
      // 提取原始组名,转换为驼峰格式
      const rawGroupName = groupMatch[1].trim();
      currentGroup = rawGroupName.split(/\s+/).reduce((camelStr, part, index) => {
        if (index === 0) return camelStr + part.toLowerCase();
        return camelStr + part.charAt(0).toUpperCase() + part.slice(1).toLowerCase();
      }, '');
      result[currentGroup] = [];
      continue;
    }
    // 子项存入当前激活分组,trim可根据是否需要保留前后空格选择保留或删除
    if (currentGroup) result[currentGroup].push(line.trim());
  }
  return result;
}

测试用例

const input = `[group a]
a
b
c
[group b]
a
d
f`;

console.log(parseGroupText(input));
// 输出结果:{ groupA: ['a', 'b', 'c'], groupB: ['a', 'd', 'f'] }

注意事项

  • 若业务需求不需要转换组名为驼峰,可直接使用原始提取的组名作为key
  • 若子项需要保留前后空格,删除代码中的.trim()即可
  • 该逻辑为通用逻辑,其他编程语言可按照相同思路实现

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 02:42:03