Как мне разобрать строку, представляющую многомерный массив в массив? - PullRequest
0 голосов
/ 13 января 2019

Задана строка в формате

"(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 голосов
/ 13 января 2019

Вот еще один подход, который использует функцию 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));
0 голосов
/ 13 января 2019

С помощью 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)
0 голосов
/ 13 января 2019

Одним из вариантов будет использование регулярного выражения, чтобы превратить скобки в квадратные скобки, заключить строки в кавычки, а затем JSON.parse it:

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));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...