767 votes

REGEX pour remplacer plusieurs espaces avec un seul espace

Étant donné une chaîne comme:

 "Le chien a une longue queue, et c'est ROUGE!" 

Quel genre de magie JQUERY, JavaScript peut être utilisé pour garder des espaces à seulement 1 max?

Objectif:

 "Le chien a une longue queue, et c'est ROUGE!" 

Merci

1364voto

BalusC Points 498232

Remplacez simplement \s{2,} par ' ' . Quelque chose comme:

 string = string.replace(/\s{2,}/g, ' ');
 

238voto

Edward Loper Points 5936

Puisque vous semblez intéressé par la performance, je profilé avec firebug. Voici les résultats que j'ai obtenu:

str.replace( / +/g, ' ' )        ->  790ms
str.replace( /  +/g, ' ' )       ->  380ms
str.replace( / {2,}/g, ' ' )     ->  470ms
str.replace( /\s\s+/g, ' ' )     ->  390ms
str.replace( / +(?= )/g, ' ')    -> 3250ms

C'est sur Firefox, l'exécution de 100k chaîne de remplacement.

Je vous encourage à faire vos propres tests de profilage avec firebug, si vous pensez que la performance est un problème. Les humains sont notoirement mauvais pour prédire où les goulets d'étranglement dans leurs programmes de mensonge.

(Notez également que IE 8 de la barre d'outils du développeur dispose également d'un générateur de profils construit en -- il pourrait être utile de vérifier que les performances, c'est comme dans IE.)

54voto

watain Points 1198
 var str = "The      dog        has a long tail,      and it is RED!";
str = str.replace(/ {2,}/g,' ');
 

MODIFIER: Si vous souhaitez remplacer tous les caractères blancs, le moyen le plus efficace serait:

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

17voto

meder Points 81864

C'est une solution, mais elle cible tous les caractères d'espace:

"The      dog        has a long tail,      and it is RED!".replace(/\s\s+/g, ' ')

"The dog has a long tail, and it is RED!"

Edit: C'est probablement mieux puisqu'il vise un espace suivi par 1 ou plusieurs espaces:

"The      dog        has a long tail,      and it is RED!".replace(/  +/g, ' ')

"The dog has a long tail, and it is RED!"

Méthode Alternative:

"The      dog        has a long tail,      and it is RED!".replace(/ {2,}/g, ' ')
"The dog has a long tail, and it is RED!"

Je n'ai pas utiliser /\s+/ par lui-même, car qui remplace les espaces qui s'étendent sur 1 caractère à plusieurs reprises et peut-être moins efficace car elle vise plus que nécessaire.

Je n'ai pas profondément test de l'un de ces lmk si il y a des bugs.

Aussi, si vous allez faire de chaîne de remplacement n'oubliez pas de ré-attribuer à la variable ou de la propriété de son propre remplacement, par exemple:

var string = 'foo'
string = string.replace('foo', '')

À l'aide de jQuery.le prototype.texte:

var el = $('span:eq(0)');
el.text( el.text().replace(/\d+/, '') )

10voto

Chris Points 41

Plus robuste:

 fonction trim (mot)
{
mot = mot.réplace (/ [^ \ x21- \ x7E] + / g, ''); // remplace les caractères non imprimables par des espaces
return word.replace (/ ^ \ s + | \ s + $ / g, ''); // supprimer les espaces avant / arrière
}

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X