2012-02-04 11 views
18

Sto provando ad esplodere una stringa usando javascript per selezionare i termini di ricerca, separati da spazi bianchi. Tuttavia ottengo elementi di array vuoti se un searchterm è terminato da uno spazio bianco, come mostrato di seguito.Dividere la stringa per spazio, senza elementi vuoti?

Cosa devo fare invece di evitare la post-elaborazione di questo array e la rimozione di elementi vuoti?

var str = "searchterm1 searchterm2"; 
console.log(str.split(" ")); // ["searchterm1", "searchterm2"] 

var strb = "searchterm1 "; // Note the ending whitespace 
console.log(strb.split(" ")); // ["searchterm1", ""] 

risposta

40

Si potrebbe semplicemente abbinare tutte le sequenze di caratteri non-spazio:

str.match(/[^ ]+/g) 
+8

Se ci possono essere schede o nuove righe, è possibile abbinare/\ S +/g. – kennebec

+0

PERCHÉ AVETE SOLO POCHI VOTI ?! la tua risposta è molto utile :) – Amir

1

Aggiungi funzione:

//Some browsers support trim so we check for that first 
if(!String.prototype.trim) { 
    String.prototype.trim = function() { 
    return this.replace(/^\s+|\s+$/g,''); 
    }; 
} 

Quindi chiamare assetto sulla stringa:

var strb = "searchterm1 "; // Note the ending whitespace 
console.log(strb.trim().split(" ")); // ["searchterm1"] 
+0

Che dire di più spazi in mezzo come '" pippo \ x20 \ x20bar "'? – Gumbo

+1

.replace (/ {2,}/g, ''); –

7

No importa quale splitter funziona sempre:

str.split(' ').filter(function(i){return i}) 
// With ES6 
str.split(' ').filter(i => i) 

La logica del filtro può anche cambiare in alcuni altri casi.

+0

Sai, ** perché ** funziona? La documentazione dice che il metodo 'filter()' crea un nuovo array con tutti gli elementi che superano il test implementato dalla funzione fornita. In questo caso gli elementi vuoti sembrano essere ignorati da questo metodo e quindi non si trovano nella matrice risultante. Non capisco perché questo test non venga eseguito per elementi vuoti. –

+3

La risposta è semplice, se hai più di un carattere di spazio, avrai una stringa vuota ('') nei risultati, e poiché 'if ('')' è false, il filtro di funzione 'filter' li spoglia nel finale risultato. – user1079877

Problemi correlati