Como remover espaços de uma string usando JavaScript?

552

Como remover espaços em uma string? Por exemplo:

Entrada:

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

Resultado:

'/var/www/site/Brandnewdocument.docx'
JLuiz
fonte
minha solução" ahm ed ".split('').filter(e => e.trim().length).join('')
UA_ 15/02

Respostas:

1224

Este?

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

Exemplo

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

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


Atualização: Com base nesta pergunta , este:

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

é uma solução melhor. Produz o mesmo resultado, mas é mais rápido.

O Regex

\sé a expressão regular para "espaço em branco" e gé o sinalizador "global", ou seja, corresponde a TODOS \s(espaços em branco).

Uma ótima explicação para +pode ser encontrada aqui .

Como observação lateral, você pode substituir o conteúdo entre aspas simples para o que desejar, para substituir o espaço em branco por qualquer outra sequência.

Šime Vidas
fonte
@ Gaaav Pesquisei respostas semelhantes no SO e vejo com .replace(/\s+/g, '')mais frequência. Existe alguma diferença entre isso e minha resposta?
Šime Vidas
neste caso, não há diferença. Mas + é usado para encontrar pelo menos uma ocorrência.
Gaurav
1
Bobo, eu estava com a impressão de que .replace(' ','')funcionaria. Muito apreciado!
Andy Mercer
3
A resposta original envolvendo (à qual Sime se vinculou em sua edição) +tem apenas 60 votos se alguém quiser creditar-lhe também stackoverflow.com/a/5964427/4258817
Mousey
2
Cuidado para não citar acidentalmente seu regex, por exemplo, .replace('/\s+/g', '')porque ele tentará encontrar essa string literal. Este tropeçou-me antes ...
RTF
75

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

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

Duas maneiras de fazer isso!

rsplak
fonte
4
Gostei do split () e join ().
Eric Milliot-Martinez
2
split ('') e a junção não removerão \ n, \ t caracteres de espaço em branco, outra solução alternativa é a.split (''). map (c => c.trim ()). join ('')
rab
36

MAIS CURTO E MAIS RÁPIDO :str.replace(/ /g, '');


Referência:

Aqui estão meus resultados - (2018.07.13) MacOs High Sierra 10.13.3 no Chrome 67.0.3396 (64 bits), Safari 11.0.3 (13604.5.6), Firefox 59.0.2 (64 bits)):

SHORT strings

Sequência curta semelhante aos exemplos da pergunta OP

insira a descrição da imagem aqui

A solução mais rápida em todos os navegadores é / /g(regexp1a) - Chrome 17.7M (operação / s), Safari 10.1M, Firefox 8.8M. O mais lento para todos os navegadores foi a split-joinsolução. Alterar para \sou adicionar +ou iregexp diminui o processamento.

LONG strings

Para uma string com cerca de ~ 3 milhões de caracteres, os resultados são:

  • regexp1a : Safari 50.14 ops / s, Firefox 18.57, Chrome 8.95
  • regexp2b : Safari 38.39, Firefox 19.45, Chrome 9.26
  • junção dividida : Firefox 26.41, Safari 23.10, Chrome 7.98,

Você pode executá-lo em sua máquina: https://jsperf.com/remove-string-spaces/1

Kamil Kiełczewski
fonte
1
Curiosamente, o método de junção dividida agora é o mais rápido para mim no Firefox 73, seguido pelo regexp1a com 53% mais lento.
hackel
25

Após a resposta do @rsplak: na verdade, usar o modo split / join é mais rápido do que usar o regexp. Veja o caso de teste de desempenho

assim

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

opera mais rápido que

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

Em textos pequenos, isso não é relevante, mas nos casos em que o tempo é importante, por exemplo, nos analisadores de texto, principalmente na interação com os usuários, isso é importante.


Por outro lado, \s+lida com uma variedade maior de caracteres de espaço. Entre com \ne\t , ele também corresponde ao \u00a0caractere, e é isso que  ocorre quando o texto é usado textDomNode.nodeValue.

Portanto, acho que a conclusão aqui pode ser feita da seguinte maneira: se você precisar substituir apenas espaços ' ' , use split / join. Se houver símbolos diferentes da classe de símbolos - usereplace(/\s+/g, '')

Minstel
fonte
1
é muito não way faster . executou o teste e é única 2,19% mais rápido, no meu 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: Embora você use 'g' ou 'gi' para remover espaços, ambos se comportam da mesma forma.

Se usarmos 'g' na função de substituição, ele verificará a correspondência exata. mas se usarmos 'gi', ele ignorará a distinção entre maiúsculas e minúsculas.

para referência clique aqui .

Raveendra007
fonte
0

Regex + Substituir ()

Embora o regex possa ser mais lento, em muitos casos de uso, o desenvolvedor está manipulando apenas algumas seqüências de caracteres de uma só vez, portanto, considerar a velocidade é irrelevante. Mesmo que / / seja mais rápido que / \ s /, ter o '\ s' explica o que está acontecendo com outro desenvolvedor, talvez com mais clareza.

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

Dividir () + Aderir ()

O uso de Split + Join permite uma manipulação mais encadeada da string.

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
fonte