Is er een verschil tussen / \ s / g en / \ s + / g?

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+/gis 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%

\sbetekent “één spatie” en \s+betekent “een of meer spaties”.

Maar omdat u de vlag /ggebruikt (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 \sovereenkomt 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.

Other episodes