Значения массива Concat - PullRequest
0 голосов
/ 18 января 2019

У меня есть эта строка:

Item 1Item 2Item 3Item 4

Я хочу получить:

["Item 1", "Item 2", "Item 3", "Item 4"]

Я пытался сделать это:

var string = 'Item 1Item 2Item 3Item 4'
var regex = string.split(/(\d)/)
regex.splice(-1, 1)
regex[regex.length - 2] += regex[regex.length - 1];
regex.splice(-1, 1)
console.log(regex);

Но это не работает, есть идеи, как получить желаемый результат?

РЕДАКТИРОВАТЬ:

Строка в max может выглядеть так:

Item 1Item 2Item 3Item 4Item NItem N-1

Ответы [ 4 ]

0 голосов
/ 18 января 2019

Когда у вас есть группа захвата ((...)) в регулярном выражении, которое вы передаете .split, захваченный текст возвращается как часть результата. Вот почему у вас есть "1", "2" и т. Д. Между "Item ".

Помимо некоторого варианта @ решения Ори Дори , вы также можете решить это с помощью прогнозного утверждения (?=...), которое является не захватывающей конструкцией.

var string = 'Item 1Item 2Item 3Item 4Item NItem N-1';
var arr = string.split(/(?=Item)/);
console.log(arr);

Это будет работать, разбивая строку непосредственно перед любым появлением текста "Item".


Для более грубого решения без использования регулярных выражений:

var string = 'Item 1Item 2Item 3Item 4Item NItem N-1';
var arr = [];
var i = string.indexOf('Item', 1);
while (i >= 0) {
  arr.push(string.substr(0, i));
  string = string.substr(i);
  i = string.indexOf('Item', 1);
}
arr.push(string);
console.log(arr);
0 голосов
/ 18 января 2019

Если ваш elements всегда начинается со слова Item, вы можете сделать что-то подобное, используя split () :

const str = 'Item 1Item 2Item 3Item 4Item N-2Item N-1Item N'
var arr = str.split("I").slice(1).map(x => "I" + x);
console.log(arr);

Еще лучше, и в качестве альтернативы вы можете сделать это с помощью одного регулярного выражения, используя match ()

const str = 'Item 1Item 2Item 3Item 4Item 999Item N-2Item N-1Item N'
var arr = str.match(/Item\s[1-9|N|-]+/g);
console.log(arr);
0 голосов
/ 18 января 2019

Для достижения ожидаемого результата используйте нижеприведенную опцию с заменой, разделением и нарезкой

  1. Добавьте двойной пробел перед 'I', используя replace
  2. Разделить на два пробела, используя split ('')
  3. удалить первую пустую строку, используя slice (1)

var str = "Item 1Item 2Item 3Item 4Item NItem N-1"

let arr = str.replace(/\I/g, '  I').split('  ').slice(1);

console.log(arr)

codepen - https://codepen.io/nagasai/pen/qLzKwJ?editors=1010

0 голосов
/ 18 января 2019

Примечание: ответ обрабатывает исходный регистр - до обновления

Используйте String.match(), чтобы найти последовательность не чисел, которая заканчивается последовательностьючисла ( regex101 ):

var string = 'Item 1Item 2Item 3Item 4'
var arr = string.match(/\D+\d+/g)
console.log(arr);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...