Я искал короткий код, который может помещать запятые в набор цифр, пока я не достиг this site.Regex читает справа налево
Код:
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;
}
работает действительно здорово. Имея этот пример набора номера:
addCommas('83475934.89');
вернется "83,475,934.89"
, но когда я прочитал код, я ожидаю, что вернуть 8,3,4,7,5,934.89
но это сайты объясняет, что
\d+
в сочетании с\d{3}
будет соответствовать группе из 3 номеров предшествует любое количество чисел. Это приводит к тому, что поиск заменяется справа налево.
И я так запутался. Как этот код читается справа налево? Кроме того, что означает $1
и $2
?
'$ 1' и' $ 2' представляют группы захвата – smerny
Это не _read_ справа налево, оно _replaces_ справа налево. Вроде. Обратите внимание, что вы можете сделать функцию еще короче - очень незначительное изменение в регулярном выражении устраняет необходимость делать 'split()' в десятичной точке, сохраняя три строки кода: http://jsfiddle.net/TqCRh/ – nnnnnn
@nnnnnn Хорошая добыча! –