function putComma(price) {
return price.toString().replace(/\B(?=(?:\d{3})+(?!\d))/g, ",");
}
Это рабочий фрагмент для запятой на номера не менее 4 цифр.
Но как это → /\B(?=(?:\d{3})+(?!\d))/g
сказать, что число составляет не менее 4 цифр?
function putComma(price) {
return price.toString().replace(/\B(?=(?:\d{3})+(?!\d))/g, ",");
}
Это рабочий фрагмент для запятой на номера не менее 4 цифр.
Но как это → /\B(?=(?:\d{3})+(?!\d))/g
сказать, что число составляет не менее 4 цифр?
Как и комментарии, чтение о регулярных выражениях будет наиболее выгодным для вас (в конечном итоге). Нарушение этого конкретного регулярного выражения таково:
\B
говорит, что он смотрит только в пределах границы слова (это означает, что он не может быть частью другого типа слова - он не может быть b123412b123
, а только принимать то, что он находит, если он стоит один - 123456
, a 123456 w
(?=
сообщает ему, чтобы найти все, что находится в группе (пока оно не достигнет соответствующей закрывающей скобки) и только вернется, если оно будет найдено в целом, но также убедитесь, что замена выполняется в обратном порядке, потому что он смотрит далеко вперед по отношению к концу строки.?:
указывает, что он ищет следующее совпадение, но не создает обратную ссылку (термин в регулярных выражениях)\d{3}
ищет 3 цифры подряд.+
после этого отмечает, что 3 цифры (завернутые в круглые скобки, чтобы убедиться, что правило рассматривается как один блок, например, - (\d{3})+
) шаблон может повторить (3 цифры, 6, 9 и т.д.).(?!\d)
ищет еще одну цифру, но исключая ее, убедившись, что цифры находятся в группах по 3 и не сопровождаются цифрами, которые не входят в группы из 3.Таким образом, в основном он ищет 1 или более групп из 3 цифр, сообщая RegEx не, чтобы вернуть соответствующие цифры (потому что они игнорируются с помощью ?:
), поэтому возвращает только часть сопоставьте это не ничего - он возвращает \B
, и то, что заменяется. Так эффективно он заменяет только полные группы из 3, начиная с конца строки, заставляя его превращать 3333333
в 3,333,333
.