Wanneer we een tekenreeks hebben die ruimtetekens bevat:
var str = ' A B C D EF ';
en we willen de spaties uit de string verwijderen (we willen dit: 'ABCDEF'
).
Beide:
str.replace(/\s/g, '')
en dit:
str.replace(/\s+/g, '')
retourneert het juiste resultaat.
Betekent dit dat de +
overbodig is in deze situatie? Is er een verschil tussen die twee reguliere uitdrukkingen in deze situatie (zoals in, kunnen ze op enigerlei wijze verschillende resultaten opleveren)?
Update: Performance vergelijking – /\s+/g
is sneller. Zie hier: http://jsperf.com/s-vs-s
Antwoord 1, Autoriteit 100%
In de eerste regex wordt elk ruimtekarakter vervangen, karakter van karakter, met de lege tekenreeks.
In de tweede regex wordt elke aangrenzende string van ruimtetekens vervangen door de lege tekenreeks vanwege de +
.
Net als hoe 0 vermenigvuldigd met iets anders is 0, lijkt het alsof beide methoden strippen op precies dezelfde manier spaties.
Als u de vervangende reeks wijzigt naar '#'
, wordt het verschil veel duidelijker:
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#
Antwoord 2, Autoriteit 12%
\s
betekent “één spatie” en \s+
betekent “een of meer spaties”.
Maar omdat u de vlag /g
gebruikt (vervang alle gebeurtenissen) en vervanging met de lege reeks, hebben uw twee uitdrukkingen hetzelfde effect.
Antwoord 3, Autoriteit 5%
In een match-situatie zou de eerste een wedstrijd per whitespace retourneren, wanneer de tweede een overeenkomst zou retourneren voor elke groep witvakken.
Het resultaat is hetzelfde omdat u het vervangt met een lege tekenreeks. Als u het bijvoorbeeld door ‘x’ vervangt, zouden de resultaten verschillen.
str.replace(/\s/g, 'x')
retourneert ‘xxaxbxxcxxxdxef’
terwijl str.replace(/\s+/g, 'x')
retourneert ‘xaxbxcxdxef’
Omdat \s
overeenkomt met elk wit, vervangt elk met ‘x’ en \s+
overeenkomt met groepen witruimtes, vervang meerdere sequentiële witruimtes met een enkele ‘x’ .
Antwoord 4
+
betekent “een of meer tekens” en zonder het plus betekent het “één teken”. In uw geval resulteren beide in dezelfde output.