JavaScript自定义字符串转数组解析求助(仅原生JS、禁用正则)
手动解析括号数组格式字符串的JavaScript实现
不用正则,我们可以通过栈结构来处理这种嵌套的括号数组,栈能清晰管理不同层级的数组,避免递归容易出现的逻辑混乱或栈溢出问题。以下是实现代码:
function parseBracketString(str) { const stack = []; let currentArray = []; let currentValue = ''; for (let char of str) { if (char === '(') { // 遇到左括号,将当前数组暂存到栈,开启新的层级数组 stack.push(currentArray); currentArray = []; } else if (char === ')') { // 遇到右括号,先把未完成的当前值加入数组 if (currentValue.trim()) { currentArray.push(currentValue.trim()); currentValue = ''; } // 将当前层级数组作为元素,放入父级数组(从栈中取出) const parentArray = stack.pop(); parentArray.push(currentArray); currentArray = parentArray; } else if (char === ' ') { // 空格作为值的分隔符,将当前值加入数组后重置 if (currentValue.trim()) { currentArray.push(currentValue.trim()); currentValue = ''; } } else { // 普通字符累积到当前值中 currentValue += char; } } // 最终根数组就是栈清空后得到的顶层数组的第一个元素 return currentArray[0]; } // 测试示例 console.log(parseBracketString('(133 abs)(())')); // 输出 [["133", "abs"], [[]]]
核心逻辑说明
- 栈的作用:用来保存每一层的父级数组,遇到左括号时入栈,右括号时出栈,实现嵌套层级的切换
- 值的处理:通过
currentValue累积普通字符,遇到空格或右括号时,将非空的currentValue加入当前数组 - 边界处理:确保右括号闭合时,不会遗漏未完成的字符串值;同时自动忽略空值(比如连续空格的情况)
这个实现没有依赖任何第三方库,完全用原生JavaScript编写,能处理任意深度的嵌套括号结构,也避免了递归可能带来的错误。
内容的提问来源于stack exchange,提问作者Cherry
相关产品推荐
相关产品推荐

