Расщепленная строка возможных смежных элементов неизвестной длины по типу в JS - PullRequest
0 голосов
/ 05 февраля 2019

Учитывая строку (на самом деле путь svg), такую ​​как:

"M72 0v754h405v-86h-311v-211h302v-86h-302v-285h311v-86h-405z"

Я хочу получить массив, в котором каждый элемент представляет собой либо букву, либо полное положительное или отрицательное число, например:

[M, 72, 0, v, 754, h, 405, v, -86, h, -311, v, -211, h, 302, v, -86, h, -302, v, -285, h, 311, v, -86, h, -405, z]

Я думал об использовании split () с регулярным выражением, но я полагаю, что это не сработает со смежными элементами, такими как «M72», так как между ними нет ничего, что я мог бы нацелить для разделения.

Является ли единственным решением специальный цикл на цикл символов, который находит начало и конец каждого типа элемента, который я ищу, возможно, с помощью регулярного выражения?

Спасибо

Ответы [ 3 ]

0 голосов
/ 05 февраля 2019

Вы находитесь на правильном пути с помощью регулярных выражений, но вы можете воспользоваться тем фактом, что с split все группы захвата в шаблоне будут возвращаться вместе со строками по обе стороны от совпадения.

Шаблон, подобный /\s*([-+]?\d+)\s*/g, выберет любые числа и , разделив строку вокруг этих чисел.Результат может содержать пустые строки, но их можно легко удалить с помощью filter.

var input = "M72 0v754h405v-86h-311v-211h302v-86h-302v-285h311v-86h-405z";
var result = input.split(/\s*([-+]?\d+)\s*/g).filter(String);
console.log(result);
0 голосов
/ 05 февраля 2019

Вы можете сопоставить букву или цифру с дополнительным знаком минус.

var string = "M72 0v754h405v-86h-311v-211h302v-86h-302v-285h311v-86h-405zx-12.4y0.001",
    parts = string.match(/[a-z]|-?\d+\.?\d*/gi);
    
console.log(parts);
0 голосов
/ 05 февраля 2019

Вы можете использовать SVG.js для достижения этой цели: https://svgjs.com/docs/2.7/classes/#svg-patharray

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...