Ich habe diese Zeichenfolge:

Item 1Item 2Item 3Item 4

Ich möchte bekommen :

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

Ich habe versucht, dies zu tun:

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);

Aber es funktioniert nicht, eine Idee, wie man das gewünschte Ergebnis erzielt?

EDIT:

Die Zeichenfolge bei max könnte folgendermaßen aussehen:

Item 1Item 2Item 3Item 4Item NItem N-1
2
Alexandre Elshobokshy 18 Jän. 2019 im 18:56

4 Antworten

Beste Antwort

Wenn Sie eine Erfassungsgruppe ((...)) in der Regex haben, die Sie an .split übergeben, wird der erfasste Text als Teil des Ergebnisses zurückgegeben. Aus diesem Grund haben Sie die "1", "2" usw. zwischen den "Item ".

Abgesehen von einigen Variationen der @ Ori Dori-Lösung können Sie dies auch mit einem Lookahead-Zusicherung (?=...), bei der es sich um ein nicht erfassendes Konstrukt handelt.

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

Dies funktioniert, indem die Zeichenfolge unmittelbar vor dem Erscheinen des Textes "Item" auseinandergebrochen wird.


Für eine Brute-Force-Lösung ohne Regex:

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);
5
p.s.w.g 18 Jän. 2019 im 16:24

Um das erwartete Ergebnis zu erzielen, verwenden Sie die folgende Option mit Ersetzen, Teilen und Schneiden

  1. Fügen Sie doppeltes Leerzeichen vor 'I' hinzu, indem Sie Ersetzen verwenden
  2. Mit split ('') durch doppeltes Leerzeichen teilen
  3. entferne den ersten leeren String mit 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
Naga Sai A 18 Jän. 2019 im 16:13

Hinweis: Die Antwort behandelt den ursprünglichen Fall - vor dem Update

Verwenden Sie String.match() um eine Folge von Nicht-Zahlen zu finden, die mit einer Folge von Zahlen endet (regex101):

var string = 'Item 1Item 2Item 3Item 4'
var arr = string.match(/\D+\d+/g)
console.log(arr);
10
Ori Drori 18 Jän. 2019 im 16:35

Wenn Ihr elements immer mit dem Wort Item beginnt, können Sie so etwas mit 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);

Noch besser, und alternativ können Sie dies mit einem einzelnen regulären Ausdruck tun, indem Sie 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);
3
Shidersz 18 Jän. 2019 im 21:14