Comment supprimer des espaces d'une chaîne en utilisant JavaScript?

553

Comment supprimer des espaces dans une chaîne? Par exemple:

Contribution:

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

Production:

'/var/www/site/Brandnewdocument.docx'
JLuiz
la source
ma solution" ahm ed ".split('').filter(e => e.trim().length).join('')
UA_

Réponses:

1225

Cette?

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

Exemple

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

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


Mise à jour: Sur la base de cette question , ceci:

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

est une meilleure solution. Il produit le même résultat, mais il le fait plus rapidement.

The Regex

\sest l'expression régulière de "l'espace blanc" et gest le drapeau "global", ce qui signifie correspondre à TOUS\s (espaces blancs).

Une grande explication pour +peut être trouvée ici .

En remarque, vous pouvez remplacer le contenu entre les guillemets simples par tout ce que vous voulez, vous pouvez donc remplacer les espaces par n'importe quelle autre chaîne.

Šime Vidas
la source
@Gaurav J'ai cherché des réponses similaires sur SO, et je vois .replace(/\s+/g, '')plus souvent. Y a-t-il une différence entre cela et ma réponse?
Šime Vidas
dans ce cas, il n'y a pas de différence. Mais + est utilisé pour trouver au moins une occurrence.
Gaurav
1
Stupide moi, j'avais l'impression que ça .replace(' ','')marcherait. Très appréciée!
Andy Mercer
3
la réponse originale impliquant (à laquelle Sime a lié dans son montage) +n'a que 60 votes si quelqu'un veut le créditer aussi stackoverflow.com/a/5964427/4258817
Mousey
2
Faites attention à ne pas citer accidentellement votre expression régulière, par exemple, .replace('/\s+/g', '')car elle essaiera de trouver cette chaîne littérale. Cela m'a fait trébucher avant ...
RTF
75

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

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

Deux façons de procéder!

rsplak
la source
4
J'ai aimé le split () et join ().
Eric Milliot-Martinez
2
split ('') et join ne supprimera pas \ n, \ t les espaces blancs, une autre solution de contournement est a.split (''). map (c => c.trim ()). join ('')
rab
36

PLUS COURT ET PLUS RAPIDE :str.replace(/ /g, '');


Référence:

Voici mes résultats - (2018.07.13) MacOs High Sierra 10.13.3 sur Chrome 67.0.3396 (64 bits), Safari 11.0.3 (13604.5.6), Firefox 59.0.2 (64 bits)):

Cordes COURTES

Chaîne courte similaire aux exemples de la question OP

entrez la description de l'image ici

La solution la plus rapide sur tous les navigateurs est / /g(regexp1a) - Chrome 17.7M (opération / sec), Safari 10.1M, Firefox 8.8M. La split-joinsolution la plus lente pour tous les navigateurs . Changement à \sou ajouter +ou ià RegExp ralentit le traitement.

LONGES cordes

Pour une chaîne, environ 3 millions de résultats de caractères sont:

  • regexp1a : Safari 50.14 ops / sec, Firefox 18.57, Chrome 8.95
  • regexp2b : Safari 38.39, Firefox 19.45, Chrome 9.26
  • jointure partagée : Firefox 26.41, Safari 23.10, Chrome 7.98,

Vous pouvez l'exécuter sur votre machine: https://jsperf.com/remove-string-spaces/1

Kamil Kiełczewski
la source
1
Fait intéressant, la méthode de jointure fractionnée est maintenant la plus rapide pour moi sur Firefox 73, suivie par regexp1a à 53% plus lentement.
hackel
25

Suite à la réponse de @rsplak: en fait, l'utilisation de la méthode split / join est plus rapide que l'utilisation de regexp. Voir le cas de test de performance

Donc

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

fonctionne plus vite que

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

Sur les petits textes, cela n'est pas pertinent, mais pour les cas où le temps est important, par exemple dans les analyseurs de texte, en particulier lors de l'interaction avec les utilisateurs, cela est important.


D'autre part, \s+gère une plus grande variété de caractères d'espace. Parmi avec \net \t, il correspond également au \u00a0caractère, et c'est ce qui  est activé lors de l'utilisation du texte textDomNode.nodeValue.

Je pense donc que la conclusion ici peut être tirée comme suit: si vous avez seulement besoin de remplacer des espaces ' ' , utilisez split / join. S'il peut y avoir différents symboles de la classe de symboles - utilisezreplace(/\s+/g, '')

Minstel
la source
1
ce n'est vraiment pas le cas way faster . a exécuté le test et il est seulement 2,19% plus rapide, sur mon 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,"");

Remarque: Bien que vous utilisiez «g» ou «gi» pour supprimer des espaces, les deux se comportent de la même manière.

Si nous utilisons «g» dans la fonction de remplacement, il vérifiera la correspondance exacte. mais si nous utilisons «gi», il ignore la sensibilité à la casse.

pour référence, cliquez ici .

Raveendra007
la source
0

Regex + Replace ()

Bien que l'expression régulière puisse être plus lente, dans de nombreux cas d'utilisation, le développeur ne manipule que quelques chaînes à la fois, donc la vitesse n'est pas pertinente. Même si / / est plus rapide que / \ s /, avoir le '\ s' explique ce qui se passe chez un autre développeur peut-être plus clairement.

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

Fractionner () + Rejoindre ()

L'utilisation de Split + Join permet une manipulation enchaînée de la chaîne.

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
la source