Как мне разобрать строку, представляющую многомерный массив в массив?
Дана строка формата
"(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']]]]
Использование как целых чисел, так и строк без строки не позволяет мне использовать встроенный синтаксический анализ, а многомерность не позволяет использовать простые разбиения или аналогичные.
Один из вариантов - использовать регулярное выражение, чтобы превратить скобки в квадратные скобки, JSON.parse
строки в кавычки, а затем 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));
Используя 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)
Вот другой подход, который использует функцию replaceAll
для замены скобок из (
→ [
and )
→ ]
и гарантирует, что все буквы имеют кавычки вокруг них с помощью регулярного выражения:
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));