如何将固定分组格式的纯文本转换为包含数组的结构化对象?
固定格式纯文本转结构化对象实现方案
核心逻辑为逐行解析文本,识别分组边界后归集对应子项,时间复杂度为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
相关产品推荐
相关产品推荐

