Разделение строки, разделенной дефисом, отрицательными числами или диапазоном чисел - PullRequest
0 голосов
/ 06 августа 2020

Проблема:

-

Ввод: «AB C -PQR - 1-XYZ»

Ожидаемый результат: ['AB C' , 'PQR', '-1', 'XYZ']

-

Ввод: «AB C -PQR-7-15-XYZ»

Ожидаемый результат: ['AB C', 'PQR', '7-15', 'XYZ']

-

Я пробовал использовать регулярное выражение ретроспективного анализа и просмотра вперед. Запутался. Есть указатели?

.split(/(?<=\d)-/);

https://jsfiddle.net/ye5ojhcs/4/

Ответы [ 3 ]

2 голосов
/ 06 августа 2020

Вы можете сопоставить нужные части, выполнив поиск

  • диапазон
  • отрицательное число
  • не минус символы

const split = string => string.match(/\d+-\d+|(?<=-)-\d+|[^-]+/g)

console.log(split("ABC-PQR--1-XYZ"));
console.log(split("ABC-PQR-7-15-XYZ"));
.as-console-wrapper { max-height: 100% !important; top: 0; }
1 голос
/ 06 августа 2020

Также это простой подход с простыми логами c:

let str = 'ABC-PQR-7-15-XYZ--3-HH';

// Replace digit groups and minus
str = str.replace(/(\d+)-(\d+)/g, '$1<minus>$2');
str = str.replace(/--/g, '-<minus>');

// Split
let arr = str.split('-');

// Replace markers back
arr = arr.map(val => val = val.replace(/<minus>/, '-'));

// Log
console.log(arr);
1 голос
/ 06 августа 2020

Попробуйте это:

/-(?=[A-Za-z-]|\d+-\d)/

const str = "ABC-PQR--1-APAC";
const str2 = "ABC-PQR-7-15-XYZ";

const pattern = /-(?=[A-Za-z-]|\d+-\d)/;

const splitt = str.split(pattern);
const splitt2 = str2.split(pattern);

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