¿Cómo eliminar espacios de una cadena usando JavaScript?

553

¿Cómo eliminar espacios en una cadena? Por ejemplo:

Entrada:

'/var/www/site/Brand new document.docx'

Salida:

'/var/www/site/Brandnewdocument.docx'
JLuiz
fuente
mi solución" ahm ed ".split('').filter(e => e.trim().length).join('')
UA_

Respuestas:

1225

¿Esta?

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

Ejemplo

var str = '/var/www/site/Brand new document.docx';

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


Actualización: según esta pregunta , esto:

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

Es una mejor solución. Produce el mismo resultado, pero lo hace más rápido.

La expresión regular

\ses la expresión regular para "espacio en blanco", y ges el indicador "global", que significa coincidir TODOS \s(espacios en blanco).

Una gran explicación para +se puede encontrar aquí .

Como nota al margen, puede reemplazar el contenido entre comillas simples por lo que desee, de modo que pueda reemplazar los espacios en blanco con cualquier otra cadena.

Šime Vidas
fuente
@Gaurav He buscado respuestas similares en SO, y veo .replace(/\s+/g, '')más a menudo. ¿Hay alguna diferencia entre eso y mi respuesta?
Šime Vidas
En este caso no hay diferencia. Pero + se usa para encontrar al menos una ocurrencia.
Gaurav
1
Tonto, tenía la impresión de que .replace(' ','')funcionaría. ¡Muy apreciado!
Andy Mercer
3
la respuesta original que involucra (a la que Sime se vinculó en su edición) +tiene solo 60 votos si alguien quiere acreditarlo también stackoverflow.com/a/5964427/4258817
Mousey
2
Tenga cuidado de no citar accidentalmente su expresión regular, por ejemplo, .replace('/\s+/g', '')porque intentará encontrar esa cadena literal. Esto me hizo tropezar antes ...
RTF
75

var a = b = " /var/www/site/Brand new   document.docx ";

console.log( a.split(' ').join('') );
console.log( b.replace( /\s/g, '') ); 

¡Dos formas de hacer esto!

rsplak
fuente
44
Me gustó el split () y join ().
Eric Milliot-Martinez
2
split ('') y join no eliminarán \ n, \ t espacios en blanco, otra solución es a.split (''). map (c => c.trim ()). join ('')
rab
36

MÁS CORTO Y MÁS RÁPIDO :str.replace(/ /g, '');


Punto de referencia:

Aquí mis resultados: (2018.07.13) MacOs High Sierra 10.13.3 en Chrome 67.0.3396 (64 bits), Safari 11.0.3 (13604.5.6), Firefox 59.0.2 (64 bits)):

Cuerdas cortas

Cadena corta similar a los ejemplos de la pregunta OP

ingrese la descripción de la imagen aquí

La solución más rápida en todos los navegadores es / /g(regexp1a): Chrome 17.7M (operación / seg), Safari 10.1M, Firefox 8.8M. La split-joinsolución más lenta para todos los navegadores fue la solución. Cambiar a \so add +o ide expresión regular ralentiza el proceso.

Cuerdas largas

Para una cadena de aproximadamente ~ 3 millones de caracteres los resultados son:

  • regexp1a : Safari 50.14 operaciones / seg, Firefox 18.57, Chrome 8.95
  • regexp2b : Safari 38.39, Firefox 19.45, Chrome 9.26
  • división-unión : Firefox 26.41, Safari 23.10, Chrome 7.98,

Puede ejecutarlo en su máquina: https://jsperf.com/remove-string-spaces/1

Kamil Kiełczewski
fuente
1
Curiosamente, el método de unión dividida ahora es el más rápido para mí en Firefox 73, seguido de regexp1a a un 53% más lento.
Hackel
25

Siguiendo la respuesta de @rsplak: en realidad, usar el modo dividir / unir es más rápido que usar regexp. Ver el caso de prueba de rendimiento

Entonces

var result = text.split(' ').join('')

opera más rápido que

var result = text.replace(/\s+/g, '')

En textos pequeños esto no es relevante, pero para los casos en que el tiempo es importante, por ejemplo, en los analizadores de texto, especialmente cuando interactúan con los usuarios, eso es importante.


Por otro lado, \s+maneja una mayor variedad de caracteres espaciales. Entre con \ny \t, también coincide con el \u00a0carácter, y eso es lo que  se entrega cuando se usa el texto textDomNode.nodeValue.

Entonces, creo que la conclusión aquí se puede hacer de la siguiente manera: si solo necesita reemplazar espacios ' ' , use dividir / unir. Si puede haber diferentes símbolos de clase de símbolo , usereplace(/\s+/g, '')

Minstel
fuente
1
Es mucho no way faster . ejecuté la prueba y es solo 2.19% más rápido, en mi Firefox 61.
vsync
2
  var output = '/var/www/site/Brand new document.docx'.replace(/ /g, ""); 
    or
  var output = '/var/www/site/Brand new document.docx'.replace(/ /gi,"");

Nota: Aunque usa 'g' o 'gi' para eliminar espacios, ambos se comportan igual.

Si usamos 'g' en la función de reemplazo, verificará la coincidencia exacta. pero si usamos 'gi', ignora la sensibilidad a mayúsculas y minúsculas.

para referencia haga clic aquí .

Raveendra007
fuente
0

Regex + Reemplazar ()

Aunque la expresión regular puede ser más lenta, en muchos casos de uso, el desarrollador solo manipula unas pocas cadenas a la vez, por lo que considerar la velocidad es irrelevante. A pesar de que / / es más rápido que / \ s /, tener '\ s' explica lo que le está sucediendo a otro desarrollador, quizás con mayor claridad.

let string = '/var/www/site/Brand new document.docx';
let path = string.replace(/\s/g, '');
// path => '/var/www/site/Brandnewdocument.docx'

Split () + Join ()

El uso de Split + Join permite una mayor manipulación encadenada de la cadena.

let string = '/var/www/site/Brand new document.docx';
let path => string.split('').map(char => /(\s|\.)/.test(char) ? '/' : char).join('');
// "/var/www/site/Brand/new/document/docx";
SoEzPz
fuente