2017-07-05 1 views
0

Ich versuchteWie funktioniert (? = [A-Z]) regex mit der Funktion split()?

var str = "thisIsATest"; 

var newStr = str.split(/(?=[A-Z])/); 

console.log(newStr); 

Das Ergebnis kam heraus, wie ich wollte:

['this', 'Is', 'A', 'Test'] 

aber die Funktion von

x
?= is 

x(?=y) 

Spielen wird nur, wenn x von y gefolgt.

So sollte nicht am letzten Buchstaben jedes Wortes passieren.

['thi', 'I', '', 'Test'] 

so etwas wie ... oder nicht.

da, wenn ich split(' '); tun es in jedem „Raum“

+0

'Spiele x nur, wenn x von y' In Ihrem Beispiel gefolgt ist 'X' ein leeres Spiel ist und 'Y' ein Großbuchstabe ist. – anubhava

+0

@anubhava oh okay. Da ich kein Zeichen für 'x' angegeben habe, wird es nur vor Großbuchstaben angezeigt. Ist das korrekt? – earthyearth

+0

Es passt zu jeder _position_ in der Zeichenfolge, wo das nächste Zeichen ein Großbuchstabe ist. So funktioniert ein Lookahead. –

Antwort

0

geteilt werden Wenn Sie versuchen, sich vorstellen, nicht zu spalten, dass es bei jedem Zeichen aussieht. Stattdessen versuchen, sich vorzustellen, dass es irgendwie ein wie ein Cursor arbeitet, geht aus:

|thisIsATest 

zu:

thisIsATest| 

Der Grund, warum es wie ein Cursor funktioniert, weil Sie es sagen entsprechen jede leere Zeichenfolge "", so offensichtlich, müssen Sie nur die Sachen "zwischen" den Zeichen betrachten.

Jedes Mal, wenn es sich bewegt, ?= sagt ihm, um die Zeichen voraus zu schauen, ohne voranzukommen. Wenn die vorausgehenden Zeichen mit übereinstimmen. Wenn es übereinstimmt, teilen Sie die Zeichenfolge!

hier:

this|IsATest 

die Zeichen nach dem Cursor I, so dass es passt und es teilt.

Es spaltet auch an den folgenden Positionen:

thisIs|ATest 
thisIsA|Test