2013-02-16 11 views
47

In genere utilizzo il seguente codice in JavaScript per dividere una stringa in spazi vuoti.Come dividere una stringa per spazi bianchi e ignorare gli spazi bianchi iniziali e finali in una serie di parole utilizzando un'espressione regolare?

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

Questo ovviamente funziona anche quando ci sono più caratteri di spazi vuoti tra le parole.

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

Il problema è quando ho una stringa che ha spazi iniziali o finali nel qual caso la matrice risultante di stringhe includa un carattere vuoto all'inizio e/o alla fine della matrice.

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

E 'un compito banale per eliminare tali personaggi vuoti, ma io preferirei prendere cura di questo all'interno dell'espressione regolare, se questo è possibile. Qualcuno sa quale espressione regolare potrei usare per raggiungere questo obiettivo?

+0

Cavalli per i corsi. 'split' è usato per * split * una stringa, non * mutate * it. Vedi [come tagliare una stringa in JavaScript?] (Http://stackoverflow.com/questions/498970/how-do-i-trim-a-string-in-javascript). – DCoder

+0

sfortunatamente javascript non supporta ** lookbehind ** e anche se tu avessi usato ** lookbehind **, ci sarebbe stato spazio nella prima divisione – Anirudha

+0

Non ci ho mai pensato da quella prospettiva. Grazie per la segnalazione! – natlee75

risposta

78

Se siete più interessati nei bit che non sono spazi bianchi, è possibile abbinare il non-spazio bianco al posto della scissione sul spazi.

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

Nota che le seguenti dichiarazioni null:

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

Quindi il modello migliore per imparare è:

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

Attenzione, ''' .match (/ \ S +/g)' restituisce 'null' invece di' [] '! – Andy

31

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

+3

Grazie per il suggerimento. In realtà stavo per percorrere questa strada fino a quando mi sono ricordato che è necessario un browser che supporti JavaScript 1.8. Questo va bene per la maggior parte dei nostri utenti, ma supportiamo ancora i browser più vecchi come Internet Explorer 7 e 8 i cui motori JavaScript non includono questa funzionalità. – natlee75

+4

Attenzione, ''' .trim(). Split (/ \ s + /)' restituisce '[" "]'! – Andy

9

Invece di dividere in sequenze di spazi bianchi, si potrebbe adattarsi a qualsiasi non-spazio bianco sequenze:

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