Lorsque nous avons une chaîne qui contient des caractères d'espace:
var str = ' A B C D EF ';
et nous voulons supprimer les espaces de la chaîne (nous voulons ceci:) 'ABCDEF'
.
À la fois ceci:
str.replace(/\s/g, '')
et ça:
str.replace(/\s+/g, '')
renverra le résultat correct.
Cela signifie-t-il que le +
est superflu dans cette situation? Y a-t-il une différence entre ces deux expressions régulières dans cette situation (comme dans, pourraient-elles d'une manière ou d'une autre produire des résultats différents)?
Mise à jour: comparaison des performances - /\s+/g
est plus rapide. Voir ici: http://jsperf.com/s-vs-s
javascript
regex
Šime Vidas
la source
la source
\s+
c'est plus rapide, car il peut remplacer des morceaux d'espaces blancs, alors qu'il\s
faut remplacer chaque espace blanc séparément?Réponses:
Dans la première expression régulière, chaque caractère d'espace est remplacé, caractère par caractère, par la chaîne vide.
Dans la deuxième regex, chaque chaîne contiguë de caractères d'espace est remplacée par la chaîne vide en raison de l'extension
+
.Cependant, tout comme la façon dont 0 multiplié par autre chose est 0, il semble que les deux méthodes suppriment les espaces exactement de la même manière.
Si vous remplacez la chaîne de remplacement par
'#'
, la différence devient beaucoup plus claire:var str = ' A B C D EF '; console.log(str.replace(/\s/g, '#')); // ##A#B##C###D#EF# console.log(str.replace(/\s+/g, '#')); // #A#B#C#D#EF#
la source
\s
signifie «un espace» et\s+
signifie «un ou plusieurs espaces».Mais, comme vous utilisez l'
/g
indicateur (remplacez toutes les occurrences) et que vous remplacez par la chaîne vide, vos deux expressions ont le même effet.la source
\s+
, laissant le reste intact. Par exemple,' foo bar '.replace(/\s+/, '')
vous donnerait seulement'foo bar '
modifier argh HTML en condensant deux espaces en un seulg
modificateur, seule la première occurrence d'un bloc d'espaces blancs sera remplacée.Dans une situation de correspondance, le premier renverrait une correspondance par espace, tandis que le second renverrait une correspondance pour chaque groupe d'espaces.
Le résultat est le même car vous le remplacez par une chaîne vide. Si vous le remplacez par «x» par exemple, les résultats seront différents.
str.replace(/\s/g, '')
renverra 'xxAxBxxCxxxDxEF'tandis que
str.replace(/\s+/g, '')
retournera 'xAxBxCxDxEF'car
\s
correspond à chaque espace, en remplaçant chacun par 'x', et\s+
correspond à des groupes d'espaces, en remplaçant plusieurs espaces séquentiels par un seul 'x'.la source
+
signifie «un ou plusieurs caractères» et sans le signe plus, cela signifie «un caractère». Dans votre cas, les deux aboutissent au même résultat.la source