2017-06-16 4 views
0

Nach MDN x* : *Matches the preceding item x 0 or more times.*Regex Sternchen Nutzung

Im Wesentlichen sollten die vorhergehenden Zeichen vollständig optional sein. Die Zeichenfolge wird angepasst, unabhängig davon, ob sie existiert oder nicht. Also warum ist es, dass:

1.

var text = "foobar"; 
var re = /q*/; 
var found = text.match(re); 
console.log(found); // prints '["", index: 0, input: "foobar"]' 

aber

var re = /qz*/; 
console.log(found); // prints 'null' 

Beide Ausdrücke ebenso nicht vorhanden sind und somit 0 mal angepasst werden sollte, und '",' sollte es sein ist zurückgekommen.

Oder:

2.

var re = /fz*/; 
console.log(found); // prints '["f", index: 0, input: "foobar"]' 

aber

var re = /fzq*/; 
console.log(found); // prints 'null' 

Was hier passiert? Von meinem Verständnis 'fzq' existiert nicht, so sollte 0 Mal übereinstimmen, und "" "sollte zurückgegeben werden, richtig? Und wenn es irgendwie auf Zeichenbasis statt der ganzen Schnur übereinstimmt, sollte 'fzq*' das gleiche Resultat zurückgeben, als 'fz' - 'f' wird einmal zusammengebracht und der Rest wird 0 Mal zusammengebracht. Aber anscheinend passiert das nicht.

Könnte jemand etwas Licht auf was zur Hölle hier geschieht?

Antwort

2

x *: Entspricht dem vorherigen Element x 0 oder mehrmals.

Sie falsch verstanden diese Aussage mit alles vor * Null abgestimmt ist oder mehrmals.

Wenn Sie q* übereinstimmen, sucht der Regex in der Eingabezeichenfolge nach q. Da es in der foobar keine q gibt, wird eine leere Zeichenfolge zurückgegeben.

Wenn Sie versuchen, qz* übereinstimmen, die Regex werden versuchen, für eine beliebige Anzahl von z s nach q zu suchen. Da in der Eingabezeichenfolge kein q vorhanden ist, wird null zurückgegeben.

Um mehr Zeichen mit * oder anderen Quantifizierern zu vergleichen, müssen Sie sie mit Klammern gruppieren.

(qz)* 

was bedeutet, entsprechen die Zeichenfolge qz null oder mehrere Male. Um eine Regex zu verstehen, können Sie https://regex101.com/ Site verwenden.