Возникла проблема с переносом строк между паранцидами в массив массивов - PullRequest
1 голос
/ 27 апреля 2020

Я пытаюсь создать Array of Arrays вроде этой

[
  ["-0.75_-1.25_-1.75_-2.25"],
  ["-0.75_-1.25_-1.75_-2.25"]
]

из строки вроде:

"-9.00_-6.50,-6.00_+6.00(-0.75_-1.25_-1.75_-2.25)(-0.75_-1.25_-1.75_-2.25)"

, нажав все строки, которые находятся между ( ). Я попробовал это, используя это .match(/[^()]+/g) регулярное выражение, но это добавление всего содержимого в массив, и это только один массив, как

[
  [
    "-9.00_-6.50,-6.00_+6.00",
    "-0.75_-1.25_-1.75_-2.25",
    "-0.75_-1.25_-1.75_-2.25"
  ]
]

. Можете ли вы дать мне знать, как это исправить?

var data = "-9.00_-6.50,-6.00_+6.00(-0.75_-1.25_-1.75_-2.25)(-0.75_-1.25_-1.75_-2.25)"; 
var dataarr = [];
dataarr.push(data.match(/[^()]+/g));
console.log(dataarr);

Ответы [ 2 ]

3 голосов
/ 27 апреля 2020

Вы можете нарезать сопоставленный результат, отобразить строки с переносом и получить массивы в массиве.

var data = "-9.00_-6.50,-6.00_+6.00(-0.75_-1.25_-1.75_-2.25)(-0.75_-1.25_-1.75_-2.25)",
    result = data
        .match(/[^()]+/g)
        .slice(1)
        .map(s => [s]);

console.log(result);
0 голосов
/ 27 апреля 2020

Вам может не понадобиться split, map l oop. Вы можете использовать только регулярные выражения. Просто создайте match all функцию.

function matchAll(re, str) {
  let result = [];
  let m = null;
  do {
    m = re.exec(str);
    if (m) {
      result.push(m[1]);
    }
  } while (m);
  return result;
}

function matchAll(re, str) {
  let result = [];
  let m = null;
  do {
    m = re.exec(str);
    if (m) {
      result.push(m[1]);
    }
  } while (m);
  return result;
}

const s =
  "-9.00_-6.50,-6.00_+6.00(-0.75_-1.25_-1.75_-2.25)(-0.75_-1.25_-1.75_-2.25)";
const re = /\((.+?)\)/g;
console.log(matchAll(re, s));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...