Wenn wir eine Zeichenfolge haben, die Leerzeichen enthält:
var str = ' A B C D EF ';
und wir wollen die Leerzeichen aus der Zeichenfolge entfernen (wir wollen dies :) 'ABCDEF'
.
Beides:
str.replace(/\s/g, '')
und das:
str.replace(/\s+/g, '')
gibt das richtige Ergebnis zurück.
Bedeutet das, dass das +
in dieser Situation überflüssig ist? Gibt es in dieser Situation einen Unterschied zwischen diesen beiden regulären Ausdrücken (wie in, könnten sie in irgendeiner Weise zu unterschiedlichen Ergebnissen führen)?
Update: Leistungsvergleich - /\s+/g
ist schneller. Siehe hier: http://jsperf.com/s-vs-s
javascript
regex
Šime Vidas
quelle
quelle
\s+
, dass es schneller ist, weil es Leerzeichen ersetzen kann, während\s
jedes Leerzeichen separat ersetzt werden muss.Antworten:
In der ersten Regex wird jedes Leerzeichen zeichenweise durch die leere Zeichenfolge ersetzt.
In der zweiten Regex wird jede zusammenhängende Zeichenfolge von Leerzeichen aufgrund der durch die leere Zeichenfolge ersetzt
+
.Genau wie 0 multipliziert mit irgendetwas anderem 0 ist, scheint es jedoch so, als würden beide Methoden Leerzeichen auf genau dieselbe Weise entfernen.
Wenn Sie die Ersatzzeichenfolge in ändern
'#'
, wird der Unterschied viel deutlicher:quelle
\s
bedeutet "ein Leerzeichen" und\s+
bedeutet "ein oder mehrere Leerzeichen".Da Sie jedoch das
/g
Flag verwenden (alle Vorkommen ersetzen) und durch die leere Zeichenfolge ersetzen, haben Ihre beiden Ausdrücke den gleichen Effekt.quelle
\s+
und den Rest intakt lassen. Zum Beispiel' foo bar '.replace(/\s+/, '')
würden Sie nur'foo bar '
argh HTML bearbeiten, indem Sie zwei Leerzeichen zu einemg
Modifikator weglassen , wird nur das erste Auftreten eines Leerzeichenblocks ersetzt.In einer Übereinstimmungssituation würde die erste eine Übereinstimmung pro Leerzeichen zurückgeben, während die zweite eine Übereinstimmung für jede Gruppe von Leerzeichen zurückgeben würde.
Das Ergebnis ist das gleiche, da Sie es durch eine leere Zeichenfolge ersetzen. Wenn Sie es beispielsweise durch 'x' ersetzen, würden sich die Ergebnisse unterscheiden.
str.replace(/\s/g, '')
gibt 'xxAxBxxCxxxDxEF' zurückwhile
str.replace(/\s+/g, '')
gibt 'xAxBxCxDxEF' zurückweil
\s
mit jedem Leerzeichen übereinstimmt, jedes durch 'x' ersetzt wird, und\s+
mit Gruppen von Leerzeichen übereinstimmt, wobei mehrere aufeinanderfolgende Leerzeichen durch ein einzelnes 'x' ersetzt werden.quelle
+
bedeutet "ein oder mehrere Zeichen" und ohne das Plus "ein Zeichen". In Ihrem Fall führen beide zur gleichen Ausgabe.quelle