Szukałem krótkiego kodu, który umieści przecinki w zbiorze liczb, aż dotrę do this site.Regex czyta od prawej do lewej
Kod:
function addCommas(nStr)
{
nStr += '';
x = nStr.split('.');
x1 = x[0];
x2 = x.length > 1 ? '.' + x[1] : '';
var rgx = /(\d+)(\d{3})/;
while (rgx.test(x1)) {
x1 = x1.replace(rgx, '$1' + ',' + '$2');
}
return x1 + x2;
}
działa naprawdę świetnie. Mając ten przykład zestaw numer:
addCommas('83475934.89');
powróci "83,475,934.89"
, ale kiedy odczytać kodu, oczekuję na powrót 8,3,4,7,5,934.89
ale to strony wyjaśnia, że
\d+
w połączeniu z\d{3}
dopasuje grupa 3 liczb poprzedzonych dowolną ilością liczb. To sprawia, że wyszukiwanie polega na zastąpieniu od prawej do lewej.
I jestem taki zdezorientowany. Jak ten kod jest czytany od prawej do lewej? Co oznacza $1
i $2
?
'$ 1' i' $ 2' reprezentują grupy przechwytywania – smerny
Nie czyta się od prawej do lewej strony, przechowuje się od prawej do lewej. Raczej. Zauważ, że możesz uczynić tę funkcję jeszcze krótszą - naprawdę niewielka zmiana w regex usuwa potrzebę zrobienia 'split()' na przecinku, zapisując trzy linie kodu: http://jsfiddle.net/TqCRh/ – nnnnnn
@nnnnnn Dobry połów! –