如何将表示多维数组的字符串解析为数组?

时间:2019-01-13 01:30:37

标签: javascript node.js parsing

给出格式的字符串

"(1,(2,3,4),(5,6,(7,8,9,a,(b,c,d))))"

将其转换为JavaScript数组的最简单方法是什么?

[1, [2, 3, 4], [5, 6, [7, 8, 9, 'a', ['b', 'c', 'd']]]]

同时使用整数和无用字符串会阻止我使用内置解析,而多维性会阻止我使用简单的拆分或类似操作。

3 个答案:

答案 0 :(得分:3)

一种选择是使用正则表达式将括号变成方括号,用引号将字符串引起来,然后JSON.parse

const input = "(1,(2,3,4),(5,6,(7,8,9,a,(b,c,d))))";
const json = input
  .replace(/\(/g, '[')
  .replace(/\)/g, ']')
  .replace(/[a-z]+/g, '"$&"');
console.log(JSON.parse(json));

答案 1 :(得分:0)

这是另一种方法,该方法使用replaceAll函数替换(-> [)-> ]中的括号,并确保所有字母之间使用正则表达式将引号引起来:

const string = "(1,(2,3,4),(5,6,(7,8,9,a,(b,c,d))))";

String.prototype.replaceAll = function(search, replacement) {
  var target = this;
  return target.split(search).join(replacement);
};

const replaced = string.replaceAll("(", "[").replaceAll(")", "]").replace(/[a-zA-Z]+/g, '"$&"');

console.log(JSON.parse(replaced));

答案 2 :(得分:0)

使用oneliner,您可以执行此操作

const str = "(1,(2,3,4),(5,6,(7,8,9,a,(b,c,d))))";
const array = JSON.parse(input.replace(/\(|\)/g, (match) => match === ")" ? "]" : "[").replace(/[a-zA-Z-_]/g, '"$&"'));

console.log(array)