2013-02-16 7 views
47

Zwykle używam następującego kodu w JavaScript, aby podzielić ciąg na białe znaki.W jaki sposób podzielić ciąg znaków za pomocą białych znaków i ignorując wiodące i kończące białe znaki w tablicy słów za pomocą wyrażenia regularnego?

"The quick brown fox jumps over the lazy dog.".split(/\s+/); 
// ["The", "quick", "brown", "fox", "jumps", "over", "the", "lazy", "dog."] 

To oczywiście działa nawet wtedy, gdy między słowami jest wiele białych znaków.

"The quick brown fox  jumps over the lazy dog.".split(/\s+/); 
// ["The", "quick", "brown", "fox", "jumps", "over", "the", "lazy", "dog."] 

Problem jest, gdy mam ciąg, który ma wiodącą lub końcowe białe znaki w tym przypadku powstałe tablica łańcuchów obejmie pusty znak na początku i/lub na końcu tablicy.

" The quick brown fox jumps over the lazy dog. ".split(/\s+/); 
// ["", "The", "quick", "brown", "fox", "jumps", "over", "the", "lazy", "dog.", ""] 

Jest to trywialne zadanie wyeliminowanie takich pustych znaków, ale wolałbym zająć się tym w wyrażeniu regularnym, czy to w ogóle możliwe. Czy ktokolwiek wie, jaki wyraz regularny mógłbym użyć, aby osiągnąć ten cel?

+0

Konie na kursy. 'split' służy do * dzielenia * ciągu, a nie * mutowania * go. Zobacz [jak przyciąć napis w JavaScript?] (Http://stackoverflow.com/questions/498970/how-do-i-trim-a-string-in-javascript). – DCoder

+0

Niestety javascript nie obsługuje ** lookbehind ** i nawet gdybyś użył ** lookbehind **, w pierwszym podzieleniu byłoby miejsce – Anirudha

+0

Nigdy nie myślałem o tym z tej perspektywy. Dzięki za wskazanie tego! – natlee75

Odpowiedz

78

Jeśli jesteś bardziej zainteresowany bitów, które nie są spacje, można dopasować niepodlegania spacje zamiast podziału na białych znaków.

" The quick brown fox jumps over the lazy dog. ".match(/\S+/g); 

Należy pamiętać, że poniższe zwroty null:

" ".match(/\S+/g) 

Więc najlepszy wzór do nauki jest:

str.match(/\S+/g) || [] 
+7

Uważaj, '' .match (/ \ S +/g) 'zwraca' null' zamiast '[]'! – Andy

31

" The quick brown fox jumps over the lazy dog. ".trim().split(/\s+/);

+3

Dzięki za sugestię. Właściwie zamierzałem iść tą drogą, dopóki nie przypomniałem sobie, że wymaga przeglądarki obsługującej JavaScript 1.8. Jest to dobre dla większości naszych użytkowników, ale nadal obsługujemy starsze przeglądarki, takie jak Internet Explorer 7 i 8, których silniki JavaScript nie zawierają tej funkcji. – natlee75

+4

Uważaj, ''' .trim(). Split (/ \ s + /)' zwraca '[" "]'! – Andy

9

Zamiast dzielenie na białych sekwencji, można dopasować dowolny nie-białych znaków sekwencje:

" The quick brown fox jumps over the lazy dog. ".match(/\S+/g) 
Powiązane problemy