2015-12-15 12 views
7

następujące wyniki kodu w nieokreślonym elementem w środkowejjavascript elementy niezdefiniowane występuje podczas regex podzielić

"Hello World\n\nhello world".split(/\n(\n|\t|\s)*?\n/) 
"Hello World\n\nhello world".split(/\n(\n|\t|\s)*\n/) 

Wyjście jest

["Hello World", undefined, "hello world"] 

Chciałem podzielić gdyby były dwie nowe postacie do ewentualnego liczba nowych linii lub znaków spacji lub tabulacji między nimi, o ile nie są to alfabety, symbole lub liczby.

+1

I myślę, że chcesz '/ \ n \ s * \ n /' –

Odpowiedz

7

To dlatego, że podczas korzystania z grupy przechwytywania w strukturze podziału, javascript zawiera treść grupy przechwytywania w wyniku. Ponieważ grupa przechwytywania nie może być pusta, nigdy się nie powtórzy, dlatego dostajesz "niezdefiniowany", a nie pusty ciąg znaków.

Aby temu zapobiec, należy użyć non przechwytywania grupy lub klasy znaku:

"Hello World\n\nhello world".split(/\n(?:\n|\t|\s)*\n/) 
"Hello World\n\nhello world".split(/\n\s*\n/) # (\t and \n are already included in \s) 

Uwaga: Jeśli chcesz usunąć początkowe i końcowe spacje też można użyć:

/(?:[^\S\n]*\n){2}\s*/ 
+0

haha ​​.. rozumiem, dlaczego go otrzymałem. –

4

Użyj pliku non-capturing group, aby zapobiec dołączaniu zawartości grup przechwytywania.

/\n(?:\n|\t|\s)*?\n/ 

on powróci:

"Hello World\n\nhello world".split(/\n(?:\n|\t|\s)*?\n/); 
// ["Hello World", "hello world"] 
Powiązane problemy