119 votes

Y a-t-il une différence entre / \s /g et / \s +/g ?

Lorsque nous avons une chaîne qui contient des caractères d'espacement :

var str = '  A B  C   D EF ';

et nous voulons supprimer les espaces de la chaîne (nous voulons ceci : 'ABCDEF' ).

Tous les deux :

str.replace(/\s/g, '')

et ceci :

str.replace(/\s+/g, '')

renverra le résultat correct.

Cela signifie-t-il que la + est superflue dans cette situation ? Y a-t-il une différence entre ces deux expressions régulières dans cette situation (c'est-à-dire, peuvent-elles produire des résultats différents) ?


Mise à jour : Comparaison des performances - /\s+/g est plus rapide. Voir ici : http://jsperf.com/s-vs-s

276voto

BoltClock Points 249668

Dans la première regex, chaque espace est remplacée, caractère par caractère, par la chaîne vide.

Dans la deuxième regex, chaque chaîne contiguë de caractères d'espacement est remplacée par la chaîne vide à cause de la fonction + .

Cependant, tout comme 0 multiplié par n'importe quoi d'autre est 0, il semble que les deux méthodes suppriment les espaces exactement de la même manière.

Si vous changez la chaîne de remplacement en '#' La différence devient alors 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#

34voto

\s signifie "un espace", et \s+ signifie "un ou plusieurs espaces".

Mais, parce que vous utilisez le /g (remplacer toutes les occurrences) et en remplaçant par la chaîne vide, vos deux expressions ont le même effet.

14voto

Doug Points 3295

Dans une situation de correspondance, le premier renverrait une correspondance par espace blanc, tandis que le second renverrait une correspondance pour chaque groupe d'espaces blancs.

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, 'x') renvoie 'xxAxBxxCxxxDxEF '

alors que str.replace(/\s+/g, 'x') renvoie 'xAxBxCxDxEF '

parce que \s recherche chaque espace blanc, en le remplaçant par 'x', et \s+ fait correspondre des groupes d'espaces blancs, en remplaçant plusieurs espaces blancs séquentiels par un seul "x".

5voto

Josh M. Points 9330

+ signifie "un ou plusieurs caractères" et sans le plus il signifie "un caractère". Dans votre cas, les deux signifient la même chose.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X