É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 limiter les espaces à un seul espace maximum?
Objectif:
"Le chien a une longue queue, et il est ROUGE!"
javascript
jquery
regex
Un apprenti
la source
la source
str.replace(/ +(?= )/g,'');
vous ne remplacez rien de ce que vous n'avez pas à faire.Réponses:
Étant donné que vous souhaitez également couvrir les onglets, les nouvelles lignes, etc., remplacez simplement
\s\s+
par' '
:Si vous voulez vraiment couvrir uniquement les espaces (et donc pas les tabulations, les retours à la ligne, etc.), faites-le:
la source
function removeExtraSpaces(string){ return string.replace(/\s{2,}/g, ' ');}
trim()
. C'est plus rapide que regex. Vous pourriez simplement fairestring.trim().replace(/\s\s+/g, ' ');
oustring.replace(/\s\s+/g, ' ').trim();
./\s\s+/g
et/\s{2,}/g
ne correspondent pas aux caractères blancs sauf s'il y en a au moins deux adjacents, par exemple correspondra à \ t \ t mais ne correspondra pas à un seul \ t.string.replace(/\s+/g, ' ')
correspondra à toutes les sous-chaînes de caractères d'espaces simples et multiples et remplacera par un seul espace.Puisque vous semblez être intéressé par les performances, je les ai profilées avec Firebug. Voici les résultats que j'ai obtenus:
C'est sur Firefox, exécutant des remplacements de chaîne de 100k.
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 à prédire où se trouvent les goulots d'étranglement dans leurs programmes.
(Notez également que la barre d'outils du développeur d'IE 8 dispose également d'un profileur intégré - il peut être utile de vérifier les performances dans IE.)
la source
( / +(?= )/g, ' ');
échoue dans IE9, il laisse des espaces doubles:"Foo Bar Baz".replace(/ +(?= )/g, ' ');
->"Foo Bar Baz"
EDIT: Si vous souhaitez remplacer toutes sortes de caractères d'espaces, le moyen le plus efficace serait le suivant:
la source
C'est une solution, mais elle ciblera tous les caractères de l'espace:
Edit : C'est probablement mieux car il cible un espace suivi de 1 ou plusieurs espaces:
Méthode alternative:
Je ne l'ai pas utilisé
/\s+/
seul car cela remplace les espaces qui s'étendent sur 1 caractère plusieurs fois et pourrait être moins efficace car il cible plus que nécessaire.Je n'ai testé en profondeur aucun de ceux-ci, alors lmk s'il y a des bugs.
De plus, si vous allez faire un remplacement de chaîne, n'oubliez pas de réaffecter la variable / propriété à son propre remplacement, par exemple:
Utilisation de jQuery.prototype.text:
la source
J'ai cette méthode, je l'appelle la méthode Derp faute d'un meilleur nom.
L'exécuter dans JSPerf donne des résultats surprenants.
la source
Une méthode plus robuste: elle prend également en charge la suppression des espaces initial et final, s'ils existent. Par exemple:
Votre exemple ne comportait pas ces espaces, mais il s'agit également d'un scénario très courant, et la réponse acceptée ne faisait que les découper en espaces simples, comme: "Le ... ROUGE!", Ce qui n'est généralement pas ce dont vous aurez besoin.
la source
Plus robuste:
la source
je suggère
juste pour les espaces
OU
pour transformer également plusieurs retours en un seul retour.
la source
Je sais que je suis en retard à la fête, mais j'ai découvert une belle solution.
C'est ici:
la source
Voici une solution alternative si vous ne souhaitez pas utiliser replace (remplacez les espaces dans une chaîne sans utiliser replace javascript)
la source
Réponse complète non chiffrée pour les débutants et al.
C'est pour tous les mannequins 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 suivies 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 cela fonctionne parfaitement.
Nous les avons enchaînés avec plus de 50 à la fois et AUCUN problème.
// Cela a supprimé les caractères spéciaux + 0-9 et permet uniquement les lettres (majuscules et minuscules)
// Cela a supprimé les caractères spéciaux et autorise uniquement les lettres (majuscules et minuscules) et 0-9 ET les espaces
// Cela a supprimé les caractères spéciaux et autorise uniquement les lettres (majuscules et minuscules) et les espaces 0-9 AND // Le .replace (/ \ s \ s + / g, "") à la fin supprime les espaces excessifs // lorsque je utilisé des guillemets simples, cela n'a pas fonctionné.
:: SUIVANT :: Enregistrer # 3 sous
a .js
// J'ai appelé le mien NoDoubles.js:: SUIVANT :: Incluez votre JS dans votre page
Incluez ceci dans votre champ de formulaire :: tel que
Pour que ça ressemble à ça
Cela supprimera les caractères spéciaux, autorisera les espaces simples et supprimera les espaces supplémentaires.
la source
Aussi une possibilité:
la source
Ou si vous souhaitez également remplacer les onglets:
la source
Jquery a la fonction trim () qui transforme fondamentalement quelque chose comme ceci "FOo Bar" en "FOo Bar".
Il est beaucoup plus utile car il supprime automatiquement les espaces vides au début et à la fin de la chaîne. Aucune expression régulière nécessaire.
la source
si remplacer n'est pas utilisé, string = string.split (/ \ W + /);
la source
la source
Nous pouvons utiliser l'expression rationnelle suivante expliquée à l'aide de la commande sed du système. Le regex similaire peut être utilisé dans d'autres langues et plates-formes.
Ajoutez le texte dans un fichier, dites test
Nous pouvons utiliser l'expression régulière suivante pour remplacer tous les espaces blancs par un seul espace
J'espère que cela sert le but
la source
Essayez ceci pour remplacer plusieurs espaces par un seul espace.
En savoir plus @ Remplacement de plusieurs espaces par un seul espace
la source
résultat:
la source
Pour plus de contrôle, vous pouvez utiliser le rappel de remplacement pour gérer la valeur.
la source
Ce script supprime tout espace blanc (plusieurs espaces, tabulations, retours, etc.) entre les mots et les coupes:
la source
'mouse pointer touch' .replace (/ ^ \ s + | \ s + $ | (\ s) + / g, "$ 1") devrait faire l'affaire!
la source
Je sais que nous devons utiliser l'expression régulière, mais lors d'une interview, on m'a demandé de le faire SANS UTILISER REGEX.
@slightlytyler m'a aidé à proposer l'approche ci-dessous.
la source