2011-08-22 16 views
55

Estoy escribiendo un pequeño plugin para que JQuery quite espacios de una cadena. see hereExpresión regular de Javascript Eliminar espacios

(function($) { 
    $.stripSpaces = function(str) { 
     var reg = new RegExp("[ ]+","g"); 
     return str.replace(reg,""); 
    } 
})(jQuery); 

mi expresión regular es actualmente [ ]+ para recoger todos los espacios. Esto funciona .. Sin embargo, no deja un buen sabor de boca .. También probé y [\s]+[\W]+ pero tampoco funcionó ..

Tiene que haber una manera mejor (más concisa) de buscar solamente espacios.

Respuesta

141

Yo recomendaría que utilice la notación literal, y el uso de la clase \s personaje:

//.. 
return str.replace(/\s/g, ''); 
//.. 

Hay una diferencia entre el uso de la clase de caracteres \s y justo ' ', este coincidirá con muchos más caracteres de espacio en blanco, por ejemplo '\t\r\n' etc., buscando ' ' reemplazará solo el espacio en blanco ASCII 32.

El constructor RegExp es útil cuando desea crear un patrón dinámico, en este caso no lo necesita.

Por otra parte, como usted ha dicho, "[\s]+" qué no trabajó con el RegExp constructor, eso es porque usted está pasando una cadena, y usted debe "doble escape" las copias de barras, de lo contrario, se interpretará como personaje escapa dentro de la cadena (por ejemplo: "\s" === "s" (escape desconocido)).

1
str.replace(/\s/g,'') 

funciona para mí.

jQuery.trim tiene este truco para IE, aunque no estoy seguro de lo que afecta a las versiones:

// Check if a string has a non-whitespace character in it 
rnotwhite = /\S/ 

// IE doesn't match non-breaking spaces with \s 
if (rnotwhite.test("\xA0")) { 
    trimLeft = /^[\s\xA0]+/; 
    trimRight = /[\s\xA0]+$/; 
} 
11
"foo is bar".replace(/ /g, '') 
Cuestiones relacionadas