Javascript Split Regex Frage

116

Hallo, ich versuche, was ich dachte, wäre ein ziemlich einfacher Regex in Javascript, aber es macht mir viel Ärger. Ich möchte die Möglichkeit haben, ein Datum über Javascript zu teilen, indem ich es entweder durch ein '-', '.', '/' Und '' teile.

var date = "02-25-2010";
var myregexp2 = new RegExp("-."); 
dateArray = date.split(myregexp2);

Was ist die richtige Regex für diese jede Hilfe wäre großartig.

Craig
quelle

Antworten:

174

Sie müssen die Zeichen, die Sie aufteilen möchten, in eine Zeichenklasse einfügen , die der Engine für reguläre Ausdrücke mitteilt, dass "jedes dieser Zeichen eine Übereinstimmung ist". Für Ihre Zwecke würde dies so aussehen:

date.split(/[.,\/ -]/)

Obwohl Bindestriche in Zeichenklassen als Bereichsspezifizierer eine besondere Bedeutung haben (dh [a-z]dasselbe bedeuten wie [abcdefghijklmnopqrstuvwxyz]), bedeutet dies , wenn Sie es als letztes Element in der Klasse angeben , einen wörtlichen Bindestrich und muss nicht maskiert werden.

Um zu erklären, warum Ihr Muster nicht funktioniert hat, /-./weist es die Engine für reguläre Ausdrücke an, mit einem wörtlichen Bindestrich gefolgt von einem beliebigen Zeichen übereinzustimmen ( Punkte sind Platzhalterzeichen in regulären Ausdrücken). Mit "02-25-2010" würde es jedes Mal geteilt, wenn "-2" angetroffen wird, da der Bindestrich und der Punkt mit "2" übereinstimmen.

Daniel Vandersluis
quelle
3
Sie können auch erwähnen, dass ein Punkt innerhalb einer Zeichenklasse keine besondere Bedeutung hat - anstatt als Platzhalterzeichen zu fungieren (was keinen Sinn ergibt ), fungiert er als Literal.
Bobby Jack
11

oder einfach (alles andere als Zahlen):

date.split(/\D/);
Jo3y
quelle
6

Sie könnten nur verwenden

date.split(/-/);

oder

date.split('-');
Allan Ruine
quelle
1
Setzen Sie einen Zeilenumbruch vor Ihren Code und die 4 Leerzeichen formatieren ihn richtig.
Brandon
5

Teilen Sie es dann auf alles andere als Zahlen auf:

date.split(/[^0-9]/);
nutzlos
quelle
3

Angenommen, Ihre Zeichenfolge lautet:

let str = `word1
word2;word3,word4,word5;word7
word8,word9;word10`;

Sie möchten die Zeichenfolge durch die folgenden Trennzeichen teilen:

  • Doppelpunkt
  • Semikolon
  • Neue Zeile

Sie können die Zeichenfolge folgendermaßen aufteilen:

let rawElements = str.split(new RegExp('[,;\n]', 'g'));

Schließlich müssen Sie möglicherweise die Elemente im Array zuschneiden:

let elements = rawElements.map(element => element.trim());
Bobzius
quelle
0

oder einfach für Datumszeichenfolgen 2015-05-20 oder 2015.05.20 verwenden

date.split(/\.|-/);
Piotr Stępniewski
quelle
-1

Versuchen Sie dies stattdessen

date.split (/ \ W + /)

Omar
quelle
Können Sie erklären, warum dies eine bessere Antwort ist als die bereits zuvor veröffentlichten 5+? Und wie funktioniert es eigentlich?
Mjuarez
Dies funktionierte tatsächlich am besten aus allen Antworten für mich.
Reectrix