Regex pour remplacer les espaces multiples avec un seul espace
Donné une chaîne de caractères comme:
"Le chien a une longue queue, et c'est ROUGE!"
Ce genre de jQuery ou JavaScript magic peut être utilisé pour conserver les espaces à un seul espace de max?
Objectif:
"Le chien a une longue queue, et c'est ROUGE!"
- Voulez-vous aussi pour correspondre à whitespacy des caractères de tabulation?
- Oui, merci, bonne question.... Avec toutes ces différentes réponses, comment on est censé savoir qui est la solution la plus efficace?
- Tout le monde ci-dessous est juste, mais c'est le plus optimisé regex:
str.replace(/ +(?= )/g,'');
vous n'êtes pas le remplacement de tout ce que vous n'avez pas à. - Il n'y a pas de différence notable dans les performances. Vous pourriez toujours de profil, mais je doute que cela en vaudrait la peine. Je voudrais aller le plus clair.
- Pas vrai, au moins sur Firefox. Cette version s'exécute beaucoup plus lentement. Voir le profilage des résultats dans ma réponse (ci-dessous).
Vous devez vous connecter pour publier un commentaire.
Étant donné que vous aussi, vous voulez couvrir des tabulations, retours à la ligne, etc, il suffit de remplacer
\s\s+
avec' '
:Si vous voulez vraiment pour couvrir seulement les espaces (et donc pas des tabulations, retours à la ligne, etc), faire:
function removeExtraSpaces(string){ return string.replace(/\s{2,}/g, ' ');}
trim()
. Il est plus rapide que la regex. Vous pourriez fairestring.trim().replace(/\s\s+/g, ' ');
oustring.replace(/\s\s+/g, ' ').trim();
./\s\s+/g
et/\s{2,}/g
ne correspondent pas whitespacey caractères, sauf si il y a au moins deux adjacents les uns aux autres, par exemple correspondre \t\t mais ne trouvera pas unique \t.string.replace(/\s+/g, ' ')
tous uniques et multiples whitespacey sous-chaînes de caractères et de le remplacer avec de l'espace.Puisque vous semblez intéressé par la performance, je profilé avec firebug. Voici les résultats que j'ai obtenu:
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.)
( / +(?= )/g, ' ');
échoue dans IE9, elle laisse des espaces de double:"Foo Bar Baz".replace(/ +(?= )/g, ' ');
-->"Foo Bar Baz"
EDIT:
Si vous souhaitez remplacer tous les types de caractères espace est le moyen le plus efficace serait comme ça:
C'est une solution, bien qu'il cible les tous les caractères d'espace:
Modifier: C'est probablement mieux puisqu'il vise un espace suivi par 1 ou plusieurs espaces:
Méthode Alternative:
Je n'ai pas utilisé
/\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:
À l'aide de jQuery.le prototype.texte:
J'ai cette méthode, je l'appelle le Derp méthode, faute d'un meilleur nom.
Exécution en JSPerf donne des résultats surprenants.
Une méthode plus solide: Il prend soin de aussi suppression de la formation initiale et les espaces de fin, si elles existent. Par exemple:
Votre exemple n'ont pas de ces espaces, mais ils sont à un scénario très commun aussi, et l'on a accepté la réponse était seulement le parage des personnes dans des espaces simples, comme: "Le ... ROUGE! ", ce qui n'est pas ce que vous aurez généralement besoin.
Plus robuste:
Je suggère
pour juste des espaces
OU
pour le tournage de plusieurs retourne en un seul retour également.
Voici une autre solution si vous ne souhaitez pas utiliser replace (remplacer les espaces dans une chaîne sans l'aide de remplacer javascript)
Je sais que je suis en retard à la fête, mais j'ai découvert une belle solution.
Ici, il est:
Global chiffré de réponse pour les débutants et coll.
C'est pour toutes les nuls comme moi qui test des scripts écrits par certains d'entre vous les gars qui ne fonctionnent pas.
Les 3 suivants sont des exemples de mesures que j'ai pris pour supprimer les caractères spéciaux ET les espaces supplémentaires sur les 3 sites internet (qui fonctionne parfaitement) {1. EtaVisa.com 2. EtaStatus.com 3. Tikun.com} donc je sais qu'ils fonctionnent parfaitement.
Nous avons enchainé celles-ci avec plus de 50 à l'heure et PAS de problèmes.
//Cette enlevés caractères spéciaux + 0-9 et permet juste de lettres (majuscules et minuscules)
//Cette enlevés, des caractères spéciaux et permet juste de lettres (majuscules et minuscules) et de 0 à 9 ET des espaces
//Cette enlevés, des caractères spéciaux et permet juste de lettres (majuscules et minuscules) et de 0 à 9 ET des espaces
//Le .replace(/\s\s+/g, " ") à la fin supprime excessive des espaces
//lorsque j'ai utilisé des guillemets simples, il n'a pas de travail.
::NEXT::
Enregistrer ° 3 comme
a .js
//j'ai appelé le mien NoDoubles.js::NEXT::
Inclure votre JS dans votre page
De les inclure dans votre champ de formulaire:: comme
De sorte qu'il ressemble à ce
Cela permettra de supprimer les caractères spéciaux, autoriser des espaces simples et supprimer des espaces supplémentaires.
Aussi une possibilité:
Jquery a fonction trim() qui s'avère essentiel de quelque chose comme cela "FOo Bar" en "FOo Bar".
Il est beaucoup plus utile car il est automatiquement supprime les espaces vides au début et à la fin de la chaîne ainsi. Pas besoin de regex.
Ou si vous aussi vous voulez remplacer les tabulations:
Nous pouvons utiliser la regex suivante expliquées à l'aide de sed système de commande. La même expression régulière peut être utilisé dans d'autres langues et d'autres plates-formes.
Ajouter le texte dans un fichier dire test
Nous pouvez utiliser les regex pour remplacer tous les espaces blancs avec espace unique
Espère que cela sert l'objectif
Essayez ceci pour remplacer plusieurs espaces par un seul espace.
Lire plus @ Remplacement de Plusieurs Espaces Espace Unique
résultat:
Pour plus de contrôle, vous pouvez utiliser le remplacer callback pour gérer la valeur.
Ce script supprime tout espace blanc (plusieurs espaces, tabulations, retours, etc) entre les mots et les garnitures:
est de remplacer n'est pas utilisé, string = string.split(/\W+/);