2012-02-04 12 views
18

Estoy intentando explotar una cadena usando javascript para seleccionar los términos de búsqueda, separados por espacios en blanco. Sin embargo, obtengo elementos de matriz vacíos si un término de búsqueda termina con un espacio en blanco, como se muestra a continuación.¿Separación de cadena por espacio en blanco, sin elementos vacíos?

¿Qué debo hacer para evitar el procesamiento posterior de esta matriz y la eliminación de elementos vacíos?

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

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

Respuesta

40

Simplemente podría coincidir con todas las secuencias de caracteres no-espacio:

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

Si puede haber pestañas o líneas nuevas, puede hacer coincidir/\ S +/g. – kennebec

+0

¿POR QUÉ TENEMOS POCOS VOTOS? tu respuesta es muy útil :) – Amir

1

Añadir función:

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

A continuación, llame de regulación en la cadena:

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

¿Qué pasa con los espacios múltiples entre 'como' "foo \ x20 \ x20bar" '? – Gumbo

+1

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

7

n importa qué divisor esto siempre funciona:

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

La lógica del filtro también puede cambiar en algunos otros casos.

+0

¿Sabe usted, ** por qué ** esto funciona? La documentación dice que el método 'filter()' crea una nueva matriz con todos los elementos que pasan la prueba implementada por la función proporcionada. En este caso, los elementos vacíos parecen ser ignorados por este método y, por lo tanto, no están en la matriz resultante. No entiendo por qué esta prueba no se realiza para elementos vacíos. –

+3

La respuesta es simple, si tiene más de un carácter de espacio, tendrá una cadena vacía ('') en sus resultados, y como 'if ('')' es falso, el filtro de función 'filter' los borrará en la resultado. – user1079877

Cuestiones relacionadas