Frage

Da ich diese Frage begann zu schreiben, ich glaube, ich die Antworten auf jede Frage herausgefunden ich hatte, aber ich dachte, dass ich auf jeden Fall schreiben würde, wie es für andere und mehr Klarheit nützlich sein könnte hilfreich sein.

Ich habe versucht, mit dem JavaScript-Funktion Split einen regulären Ausdruck mit Look-Ahead zu verwenden. Aus irgendeinem Grund Spaltung war es nicht die Zeichenfolge, obwohl es eine Übereinstimmung findet, wenn ich Spiel nennen. Ursprünglich dachte ich, das Problem aus war Look-Ahead in meinem regulären Ausdruck. Hier ist ein vereinfachtes Beispiel:

Funktioniert nicht:

"aaaaBaaaa".split("(?=B).");

Works:

"aaaaBaaaa".match("(?=B).");

Es scheint, das Problem war, dass in dem geteilten Beispiel wurde die übergebene Zeichenfolge nicht als regulärer Ausdruck interpretiert wird. vorwärts Mit Schrägstrichen anstelle von Zitaten scheint das Problem zu beheben.

"aaaaBaaaa".split(/(?=B)./);

I bestätigte meine Theorie mit dem folgende dummen schau Beispiel:

"aaaaaaaa(?=B).aaaaaaa".split("(?=B).");

Hat jemand denken, es seltsam, dass die Match-Funktion voraus, dass Sie einen regulären Ausdruck, während die Split-Funktion nicht?

War es hilfreich?

Lösung

String.split akzeptiert entweder einen String oder einen regulären Ausdruck als ersten Parameter. Die String.match Methode akzeptiert nur ein regulärer Ausdruck.

Ich könnte mir vorstellen, dass String.match wird versuchen, und arbeiten mit dem, was passiert ist; Wenn Sie also eine Zeichenfolge übergeben werden sie es als regulärer Ausdruck interpretiert. Das String.split Methode hat nicht den Luxus, dies zu tun, weil es von regulären Ausdrücken und Streicher akzeptieren kann; in diesem Fall wäre es zu dem zweiten Vermutung dumm.


Bearbeiten : (Aus: "JavaScript: The Definitive Guide")

String.match erfordert einen regulären Ausdruck mit zu arbeiten. Das übergebene Argument muss ein RegExp Objekt sein, die das Muster angibt angepasst werden. Wenn dieses Argument nicht ein ist RegExp , wird zunächst in einem an dem RegExp() Konstruktor, indem.

Andere Tipps

Wenn ich mich richtig erinnere (und ich konnte sehr falsch hier), die Split-Methode in JavaScript implementiert wurde, bevor die Regex-Engine im allgemeinen Gebrauch waren, so ist es vermutlich für die Abwärtskompatibilität.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top