Étant donné une chaîne comme:
"Le chien a une longue queue et il est ROUGE!"
Quel type de magie jQuery ou JavaScript peut être utilisé pour conserver des espaces sur un seul espace maximum?
Objectif:
"Le chien a une longue queue et il est ROUGE!"
Étant donné que vous souhaitez également couvrir les onglets, les nouvelles lignes, etc., remplacez simplement \s\s+
par ' '
:
string = string.replace(/\s\s+/g, ' ');
Si vous voulez vraiment couvrir uniquement les espaces (et donc pas les onglets, les nouvelles lignes, etc.), faites-le:
string = string.replace(/ +/g, ' ');
Puisque vous semblez être intéressé par la performance, je les ai profilés avec Firebug. Voici les résultats que j'ai obtenus:
str.replace( / +/g, ' ' ) -> 380ms
str.replace( /\s\s+/g, ' ' ) -> 390ms
str.replace( / {2,}/g, ' ' ) -> 470ms
str.replace( / +/g, ' ' ) -> 790ms
str.replace( / +(?= )/g, ' ') -> 3250ms
Ceci est sur Firefox, en cours d'exécution 100k remplacement de chaîne.
Je vous encourage à faire vos propres tests de profilage avec firebug, si vous pensez que les performances sont un problème. Les humains sont notoirement mal à même de prédire où se situent les goulots d'étranglement dans leurs programmes.
(Notez également que la barre d'outils de développement de IE 8 dispose également d'un profileur intégré. Il peut être intéressant de vérifier l'état des performances dans IE.)
var str = "The dog has a long tail, and it is RED!";
str = str.replace(/ {2,}/g,' ');
EDIT: Si vous souhaitez remplacer tout type de caractère d'espacement, la méthode la plus efficace serait la suivante:
str = str.replace(/\s{2,}/g,' ');
Ceci est une solution, bien que cela cible tous les espaces:
"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+/
seul, car il remplace les espaces de 1 caractère plusieurs fois et risque d'être moins efficace puisqu'il cible plus que nécessaire.
Je n'ai pas testé profondément aucun de ceux-ci alors lmk s'il y a des bugs.
En outre, si vous envisagez de remplacer des chaînes, n'oubliez pas de réaffecter la variable/propriété à son propre remplacement, par exemple:
var string = 'foo'
string = string.replace('foo', '')
Utilisation de jQuery.prototype.text:
var el = $('span:eq(0)');
el.text( el.text().replace(/\d+/, '') )
J'ai cette méthode, je l'appelle la méthode Derp, faute d'un meilleur nom.
while (str.indexOf(" ") !== -1) {
str = str.replace(/ /g, " ");
}
Plus robuste:
fonction trim (Word) { Word = Word.replace (/ [^\x21-\x7E] +/g, ''); // change les caractères non imprimables en espaces retourne Word.replace (/ ^\s + |\s + $/g, ''); // supprime les espaces de début/fin }
Une méthode plus robuste: Cela prend en charge aussi en supprimant les espaces initial et final, 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 ne comportait pas ces espaces, mais ils constituent également un scénario très courant, et la réponse acceptée consistait uniquement à les réduire en espaces simples, par exemple: "Le ... ROUGE!", Ce qui n'est généralement pas nécessaire.
Je suggère
string = string.replace(/ +/g," ");
pour juste des espaces
OU
string = string.replace(/(\s)+/g,"$1");
pour transformer plusieurs déclarations en une seule déclaration également.
Voici une solution alternative si vous ne souhaitez pas utiliser le remplacement (remplacer les espaces dans une chaîne sans utiliser le remplacement 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);
Je sais que je suis en retard à la fête, mais j'ai découvert une solution intéressante.
C'est ici:
var myStr = myStr.replace(/[ ][ ]*/g, ' ');
Réponse complète non chiffrée pour newbies et al.
C’est pour tous les nuls comme moi qui testent les scripts écrits par certains d’entre vous qui ne fonctionnent pas.
Les 3 exemples suivants sont les étapes que j'ai prises pour supprimer les caractères spéciaux ET les espaces supplémentaires sur les 3 sites Web suivants (qui fonctionnent parfaitement) {1. EtaVisa.com 2. EtaStatus.com 3. Tikun.com} alors je sais que cela fonctionne parfaitement.
Nous les avons enchaînés avec plus de 50 à la fois et sans problèmes.
// Ceci a supprimé les caractères spéciaux + 0-9 et ne permet que des lettres (majuscules et minuscules)
function NoDoublesPls1()
{
var str=document.getElementById("NoDoubles1");
var regex=/[^a-z]/gi;
str.value=str.value.replace(regex ,"");
}
// Ceci supprime les caractères spéciaux et autorise uniquement les lettres (majuscules et minuscules) et les espaces 0-9 ET
function NoDoublesPls2()
{
var str=document.getElementById("NoDoubles2");
var regex=/[^a-z 0-9]/gi;
str.value=str.value.replace(regex ,"");
}
// Ceci supprime les caractères spéciaux et autorise uniquement les lettres (majuscules et minuscules) et 0-9 ET les espaces// quand j’utilisais des guillemets simples, cela ne fonctionnait pas.
function NoDoublesPls3()
{ var str=document.getElementById("NoDoubles3");
var regex=/[^a-z 0-9]/gi;
str.value=str.value.replace(regex ,"") .replace(/\s\s+/g, " ");
}
:: NEXT :: Enregistrer # 3 sous a .js
// J'ai appelé le mien NoDoubles.js
:: NEXT :: 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"/>
Alors ça ressemble à ça
<INPUT type="text" name="Name" onKeyUp="NoDoublesPls3()" onKeyDown="NoDoublesPls3()" id="NoDoubles3"/>
Cela supprimera les caractères spéciaux, autorisera les espaces simples et supprimera les espaces supplémentaires.
Aussi une possibilité:
str.replace( /\s+/g, ' ' )
Jquery a la fonction trim () qui transforme fondamentalement quelque chose comme ceci "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 supprime automatiquement les espaces vides au début et à la fin de la chaîne. Pas de regex nécessaire.
Nous pouvons utiliser la regex suivante expliquée à l'aide de la commande sed system. Le regex similaire peut être utilisé dans d'autres langages et plateformes.
Ajouter le texte dans un fichier dit test
manjeet-laptop:Desktop manjeet$ cat test
"The dog has a long tail, and it is RED!"
Nous pouvons utiliser la regex suivante 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!"
J'espère que cela sert le but
is replace n'est pas utilisé, string = string.split (/\W + /);
Essayez ceci pour remplacer plusieurs espaces par un seul.
<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>
Read more @ Remplacement de plusieurs espaces par un seul espace
Pour plus de contrôle, vous pouvez utiliser le rappel de remplacement pour gérer la valeur.
value = "tags:HUNT tags:HUNT tags:HUNT tags:HUNT"
value.replace(new RegExp(`(?:\\s+)(?:tags)`, 'g'), $1 => ` ${$1.trim()}`)
//"tags:HUNT tags:HUNT tags:HUNT tags:HUNT"
var text = `xxx df dfvdfv df
dfv`.split(/[\s,\t,\r,\n]+/).filter(x=>x).join(' ');
résultat:
"xxx df dfvdfv df dfv"
Ce script supprime tout espace blanc (espaces multiples, tabulations, retours, etc.) entre les mots et les trims:
// Trims & replaces any wihtespacing to single space between words
String.prototype.clearExtraSpace = function(){
var _trimLeft = /^\s+/,
_trimRight = /\s+$/,
_multiple = /\s+/g;
return this.replace(_trimLeft, '').replace(_trimRight, '').replace(_multiple, ' ');
};
var string = "The dog has a long tail, and it is RED!";
var replaced = string.replace(/ +/g, " ");
Ou si vous souhaitez également remplacer les onglets:
var replaced = string.replace(/\s+/g, " ");
var myregexp = new RegExp(/ {2,}/g);
str = str.replace(myregexp,' ');