Как я могу извлечь массив подстроки с помощью регулярных выражений в узлах? - PullRequest
0 голосов
/ 28 апреля 2020

У меня есть строка var со значением (1,2)(3,4), и я хотел бы извлечь из нее массив [[1,2],[3,4]]. У меня есть решение использовать str.match, но я не понял, как извлечь массив. Я пытался:

> '(1,2)(3,4)'.match(/([\d]+),([\d])*/)
[ '3,2', '3', '2', index: 1, input: '(3,2)(4,5)', groups: undefined ]

Результат не то, что я хочу. Так что же мне делать с этим регулярным выражением?

Ответы [ 2 ]

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

Вам нужно использовать /(\d+),(\d+)/g или - чтобы получить только те, которые заключены в скобки - /\((\d+),(\d+)\)/g и получить результаты, используя RegExp#exec в al oop:

var s = '(1,2)(3,4)', m, results=[];
var rx = /(\d+),(\d+)/g;
while(m=rx.exec(s)) {
  results.push([m[1], m[2]])
}
console.log(results);

Или с matchAll, если вы настроены на самые последние JS среды:

const s = '(1,2)(3,4)', rx = /(\d+),(\d+)/g;
const results = [...s.matchAll(rx)];
console.log(Array.from(results, x => [x[1],x[2]]))
0 голосов
/ 28 апреля 2020

Есть другой способ, без использования RegExp, на всякий случай:

const src = '(1,2)(3,4)',
      
      result = src
        .slice(1,-1)
        .split(')(')
        .map(s => s.split(','))
        
console.log(result)
.as-console-wrapper{min-height:100%;}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...