给出格式的字符串
"(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']]]]
同时使用整数和无用字符串会阻止我使用内置解析,而多维性会阻止我使用简单的拆分或类似操作。
答案 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)