Regex pour remplacer plusieurs espaces par un seul espace

avec une chaîne comme:

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

Quel genre de magie jQuery ou JavaScript peut être utilisé pour garder des espaces à un seul espace max?

Objectif:

"The dog has a long tail, and it is RED!"
335
demandé sur TylerH 2009-12-30 20:28:58

18 réponses

étant donné que vous voulez aussi couvrir les onglets, les nouvelles lignes, etc, il suffit de remplacer \s\s+ par ' ' :

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

si vous voulez vraiment couvrir seulement les espaces (et donc pas les onglets, newlines, etc), faites-le:

string = string.replace(/  +/g, ' ');
636
répondu BalusC 2015-05-18 07:52:15

puisque vous semblez être intéressé par la performance, je les ai profilé avec firebug. Voici les résultats que j'ai eu:

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, exécutant des remplacements de Cordes De 100k.

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ù se situent les goulots d'étranglement dans leurs programmes.

(aussi, notez que le développeur D'IE 8 toolbar a également un profileur intégré dans -- Il pourrait être intéressant de vérifier ce que la performance est comme dans IE.)

128
répondu Edward Loper 2009-12-30 19:26:37
var str = "The      dog        has a long tail,      and it is RED!";
str = str.replace(/ {2,}/g,' ');

EDIT: Si vous souhaitez remplacer toutes sortes de caractères d'espace, la manière la plus efficace serait comme cela:

str = str.replace(/\s{2,}/g,' ');
37
répondu watain 2009-12-30 17:39:13

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 car il cible un espace suivi d'un 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 utilisé /\s+/ tout seul car cela remplace les espaces qui couvrent un caractère plusieurs fois et pourrait être moins efficace depuis elle vise plus que nécessaire.

Je n'ai pas testé en profondeur tout cela donc lmk s'il y a des bogues.

aussi, si vous allez faire le remplacement de chaîne de caractères rappelez-vous de réassigner la variable / propriété à son propre remplacement, par exemple:

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

en utilisant jQuery.prototype.texte:

var el = $('span:eq(0)');
el.text( el.text().replace(/\d+/, '') )
15
répondu meder omuraliev 2009-12-30 17:45:18

j'ai cette méthode, je l'appelle le Derp méthode, faute d'un meilleur nom.

while (str.indexOf("  ") !== -1) {
    str = str.replace(/  /g, " ");
}

L'exécuter dans JSPerf donne des résultats surprenants.

13
répondu Nenotlep 2013-04-26 10:36:36

plus robuste:

function trim(word)
{
    word = word.replace(/[^\x21-\x7E]+/g, ' '); // change non-printing chars to spaces
    return word.replace(/^\s+|\s+$/g, '');      // remove leading/trailing spaces
}
9
répondu Chris 2015-06-18 12:18:24

une méthode plus robuste: cela prend soin de aussi enlever les espaces initiaux et de fuite, s'ils existent. Par exemple:

// NOTE the possible initial and trailing spaces
var str = "  The dog      has a long   tail, and it     is RED!  "

str = str.replace(/^\s+|\s+$|\s+(?=\s)/g, "");

// str -> "The dog has a long tail, and it is RED !"

votre exemple n'avait pas ces espaces, mais ils sont un scénario très commun aussi, et la réponse acceptée était de les couper en espaces simples, comme: "le ... Rouge! ", ce qui n'est pas ce que vous aurez généralement besoin.

9
répondu Ethan 2018-04-12 05:00:38

je suggère

string = string.replace(/ +/g," ");

pour les espaces

OU

string = string.replace(/(\s)+/g,"");

pour transformer des déclarations multiples en une seule déclaration.

8
répondu Leonard Meagher 2013-05-14 00:59:46

Voici une solution alternative si vous ne voulez pas utiliser remplacer (remplacer les espaces dans une chaîne sans utiliser remplacer javascript)

var str="The dog      has a long   tail, and it     is RED!";
var rule=/\s{1,}/g;
str = str.split(rule).join(" "); 
document.write(str);
6
répondu imos 2015-06-18 12:18:13

je sais que je suis en retard à la fête, mais j'ai découvert une belle solution.

le voici:

var myStr = myStr.replace(/[ ][ ]*/g, ' ');
5
répondu ToXic73 2015-04-22 06:16:23

Global chiffré de réponse pour les débutants et coll.

c'est pour tous les idiots comme moi qui testent les scripts écrits par certains d'entre vous qui ne fonctionnent pas.

les 3 exemples suivants sont les mesures que j'ai prises pour supprimer les caractères spéciaux et les espaces supplémentaires sur les 3 sites Web suivants (qui fonctionnent tous parfaitement) {1. EtaVisa.com 2. EtaStatus.com 3. Tikun.com donc je sais que ça marche parfaitement.

nous avons enchaîné ceux-ci avec plus de 50 à la fois et aucun problème.

// Cette enlevés caractères spéciaux + 0-9 et permet juste de lettres (majuscules et minuscules)

function NoDoublesPls1()
{
var str=document.getElementById("NoDoubles1");
var regex=/[^a-z]/gi;
str.value=str.value.replace(regex ,"");
}

// Cette enlevés, des caractères spéciaux et permet juste de lettres (majuscules et minuscules) et de 0 à 9 ET les espaces

function NoDoublesPls2()
{
var str=document.getElementById("NoDoubles2");
var regex=/[^a-z 0-9]/gi;
str.value=str.value.replace(regex ,"");
}

// Cette enlevés, des caractères spéciaux et permet juste de lettres (majuscules et minuscules) et 0-9 et espaces // Le. remplacer (/\s\S+ / g, " ") à la fin supprime les espaces excessifs // lorsque j'ai utilisé des guillemets simples, cela n'a pas fonctionné.

function NoDoublesPls3()
{    var str=document.getElementById("NoDoubles3");
var regex=/[^a-z 0-9]/gi;
str.value=str.value.replace(regex ,"") .replace(/\s\s+/g, " ");
}

:: suivant:: Enregistrer #3 a .js // j'ai appelé le mien NoDoubles.js

:: suivant:: Incluez votre JS dans votre page

 <script language="JavaScript" src="js/NoDoubles.js"></script>

incluez ceci dans votre champ de formulaire:: tel que

<INPUT type="text" name="Name"
     onKeyUp="NoDoublesPls3()" onKeyDown="NoDoublesPls3()" id="NoDoubles3"/>

de sorte que il ressemble à ce

<INPUT type="text" name="Name" onKeyUp="NoDoublesPls3()" onKeyDown="NoDoublesPls3()" id="NoDoubles3"/>

cela supprimera les caractères spéciaux, permettra d'utiliser des espaces simples et supprimera les espaces supplémentaires.

5
répondu PatFoster 2018-01-24 08:24:59

aussi une possibilité:

str.replace( /\s+/g, ' ' )
4
répondu rfunduk 2009-12-30 17:32:52

Jquery a la fonction trim () qui transforme fondamentalement quelque chose comme ce "FOo Bar" en "FOo Bar".

var string = "  My     String with  Multiple lines    ";
string.trim(); // output "My String with Multiple lines"

Il est beaucoup plus utile car il est automatiquement supprime les espaces vides au début et à la fin de la chaîne. Pas besoin de regex.

2
répondu Eryk Wróbel 2017-08-17 07:30:02
var myregexp = new RegExp(/ {2,}/g);

str = str.replace(myregexp,' ');
0
répondu marvin 2009-12-30 17:37:16
var string = "The dog      has a long   tail, and it     is RED!";
var replaced = string.replace(/ +/g, " ");

ou si vous voulez aussi remplacer les onglets:

var replaced = string.replace(/\s+/g, " ");
0
répondu Brian Campbell 2009-12-30 17:38:33

nous pouvons utiliser le regex suivant expliqué à l'aide de la commande système sed. Le regex similaire peut être utilisé dans d'autres langues et plates-formes.

Ajouter le texte dans un fichier dire test

manjeet-laptop:Desktop manjeet$ cat test
"The dog      has a long   tail, and it     is RED!"

nous pouvons utiliser le regex suivant pour remplacer tous les espaces blancs par un seul espace

manjeet-laptop:Desktop manjeet$ sed 's/ \{1,\}/ /g' test
"The dog has a long tail, and it is RED!"

Espère que cela sert l'objectif

0
répondu minhas23 2015-01-19 09:35:17

Essayez ceci pour remplacer plusieurs espaces par un seul espace.

<script type="text/javascript">
    var myStr = "The dog      has a long   tail, and it     is RED!";
    alert(myStr);  // Output 'The dog      has a long   tail, and it     is RED!'

    var newStr = myStr.replace(/  +/g, ' ');
    alert(newStr);  // Output 'The dog has a long tail, and it is RED!'
</script>

lire plus @ remplacer les espaces multiples par un espace unique

0
répondu jonathan klevin 2018-04-01 11:53:30
var text = `xxx  df dfvdfv  df    
                     dfv`.split(/[\s,\t,\r,\n]+/).filter(x=>x).join(' ');

résultat:

"xxx df dfvdfv df dfv"
-1
répondu Toolkit 2018-06-05 15:22:12