Come rimuovere gli spazi da una stringa usando JavaScript?


553

Come rimuovere gli spazi in una stringa? Per esempio:

Ingresso:

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

Produzione:

'/var/www/site/Brandnewdocument.docx'

la mia soluzione" ahm ed ".split('').filter(e => e.trim().length).join('')
UA_

Risposte:


1225

Questo?

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

Esempio

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

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


Aggiornamento: in base a questa domanda , questo:

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

è una soluzione migliore. Produce lo stesso risultato, ma lo fa più velocemente.

The Regex

\sè la regex per "spazi bianchi", ed gè la bandiera "globale", che corrisponde a ALL \s(spazi bianchi).

Una grande spiegazione per +può essere trovata qui .

Come nota a margine, è possibile sostituire il contenuto tra virgolette singole con tutto ciò che si desidera, quindi è possibile sostituire gli spazi bianchi con qualsiasi altra stringa.


@Gaurav Ho cercato risposte simili su SO, e vedo .replace(/\s+/g, '')più spesso. C'è una differenza tra questa e la mia risposta?
Šime Vidas,

in questo caso non c'è differenza. Ma + viene usato per trovare almeno un evento.
Gaurav,

1
Silly me, avevo l'impressione che .replace(' ','')avrebbe funzionato. Molto apprezzato!
Andy Mercer,

3
la risposta originale che coinvolge (a cui Sime era legato nella sua modifica) +ha solo 60 voti se qualcuno vuole accreditare lui / lei troppo stackoverflow.com/a/5964427/4258817
Mousey

2
Fai attenzione a non citare accidentalmente la tua regex, ad esempio .replace('/\s+/g', '')perché cercherà di trovare quella stringa letterale. Questo mi ha inciampato prima ...
RTF

75

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

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

Due modi per farlo!


4
Mi è piaciuta la divisione () e join ().
Eric Milliot-Martinez,

2
split ('') e join non rimuoveranno \ n, \ t caratteri di spazio bianco, un'altra soluzione alternativa è a.split (''). map (c => c.trim ()). join ('')
rab

36

PIÙ BREVE E PIÙ VELOCE :str.replace(/ /g, '');


Prova delle prestazioni:

Ecco i miei risultati - (2018.07.13) MacOs High Sierra 10.13.3 su Chrome 67.0.3396 (64-bit), Safari 11.0.3 (13604.5.6), Firefox 59.0.2 (64-bit)):

CORDE CORTE

Breve stringa simile agli esempi della domanda OP

inserisci qui la descrizione dell'immagine

La soluzione più veloce su tutti i browser è / /g(regexp1a) - Chrome 17.7M (operazione / sec), Safari 10.1M, Firefox 8.8M. Il più lento per tutti i browser era la split-joinsoluzione. Passare a \so aggiungere +o iregexp rallenta l'elaborazione.

LUNGHE stringhe

Per una stringa di circa 3 milioni di caratteri i risultati sono:

  • regexp1a : Safari 50.14 ops / sec, Firefox 18.57, Chrome 8.95
  • regexp2b : Safari 38.39 , Firefox 19.45, Chrome 9.26
  • split-join : Firefox 26.41, Safari 23.10, Chrome 7.98,

Puoi eseguirlo sul tuo computer: https://jsperf.com/remove-string-spaces/1


1
È interessante notare che il metodo split-join è ora il più veloce per me su Firefox 73, seguito da regexp1a al 53% più lento.
hackel

25

A seguito della risposta di @rsplak: in realtà, l'uso del modo split / join è più veloce dell'uso di regexp. Vedi il caso del test delle prestazioni

Così

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

funziona più velocemente di

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

Nei testi di piccole dimensioni ciò non è rilevante, ma per i casi in cui il tempo è importante, ad esempio negli analisti di testi, in particolare quando interagiscono con gli utenti, ciò è importante.


D'altra parte, \s+gestisce una più ampia varietà di caratteri spaziali. Oltre a \ne \t, corrisponde anche al \u00a0carattere, e questo è ciò che  viene restituito, quando si ottiene il testo utilizzando textDomNode.nodeValue.

Quindi penso che la conclusione qui può essere fatta come segue: se hai solo bisogno di sostituire gli spazi ' ' , usa split / join. Se possono esserci diversi simboli della classe di simboli , utilizzarereplace(/\s+/g, '')


1
è molto non way faster . ha eseguito il test ed è solo il 2,19% più veloce, sul mio 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: sebbene si usi 'g' o 'gi' per rimuovere gli spazi, entrambi si comportano allo stesso modo.

Se usiamo 'g' nella funzione di sostituzione, controllerà la corrispondenza esatta. ma se usiamo "gi", ignora la distinzione tra maiuscole e minuscole.

per riferimento clicca qui .


0

Regex + Sostituisci ()

Sebbene regex possa essere più lento, in molti casi d'uso lo sviluppatore sta manipolando solo poche stringhe alla volta, quindi la velocità è irrilevante. Anche se / / è più veloce di / \ s /, avere '\ s' spiega cosa sta succedendo a un altro sviluppatore forse più chiaramente.

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

Dividi () + Partecipa ()

L'uso di Split + Join consente un'ulteriore manipolazione concatenata della stringa.

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";
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.