Expresión regular de Javascript Eliminar espacios

89

Así que estoy escribiendo un pequeño complemento para JQuery para eliminar espacios de una cadena. mira aquí

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

mi expresión regular es actualmente [ ]+para recopilar todos los espacios. Esto funciona ... sin embargo, no me deja un buen sabor de boca ... También lo intenté [\s]+y [\W]+tampoco funcionó ...

Tiene que haber una forma mejor (más concisa) de buscar solo espacios.

rlemon
fuente

Respuestas:

229

Te recomendaría que uses la notación literal y la \sclase de carácter:

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

Hay una diferencia entre usar la clase de caracteres \sy solo ' ', esto coincidirá con muchos más caracteres de espacio en blanco, por ejemplo, '\t\r\n'etc., buscar ' 'reemplazará solo el espacio en blanco ASCII 32.

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

Además, como dijiste, "[\s]+"no funcionó con el RegExpconstructor, eso se debe a que estás pasando una cadena, y debes "doble escape" de las barras diagonales inversas, de lo contrario se interpretarán como caracteres que se escapan dentro de la cadena (por ejemplo: "\s" === "s"(desconocido escapar)).

Christian C. Salvadó
fuente
14
"foo is bar".replace(/ /g, '')
Rescate Briggs
fuente
1
str.replace(/\s/g,'')

Funciona para mi.

jQuery.trim tiene el siguiente truco para IE, aunque no estoy seguro de a qué versiones afecta:

// 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]+$/;
}
Stefan Kendall
fuente
1

Eliminar todos los espacios en la cadena

// Remove only spaces
`
Text with spaces 1 1     1     1 
and some
breaklines

`.replace(/ /g,'');
"
Textwithspaces1111
andsome
breaklines

"

// Remove spaces and breaklines
`
Text with spaces 1 1     1     1
and some
breaklines

`.replace(/\s/g,'');
"Textwithspaces1111andsomebreaklines"
DarckBlezzer
fuente
1

En producción y trabajos en saltos de línea

Esto se usa en varias aplicaciones para limpiar el contenido generado por el usuario eliminando espacios / devoluciones adicionales, etc. pero conserva el significado de los espacios.

text.replace(/[\n\r\s\t]+/g, ' ')
Jason Sebring
fuente