GinCanhViet Ответов: 1

Регулярное выражение работает в chrome, но ломается в safari: недопустимое регулярное выражение: недопустимое имя спецификатора группы


Я пытаюсь напечатать десятичное число в JavaScript с запятыми в качестве разделителей тысяч.

function numberWithCommas(number) {
   return number.toString().replace(/\B(?<!\.\d*)(?=(\d{3})+(?!\d))/g, ",");
}


Это регулярное выражение хорошо работает на android, но ломается в iOS (safari, event chrome)

Invalid regular expression: invalid group specifier name


Пожалуйста, помогите!!

Что я уже пробовал:

вместо этого используется старое регулярное выражение

function addCommas(nStr) {
         nStr += '';
         var x = nStr.split('.');
         var x1 = x[0];
         var x2 = x.length > 1 ? '.' + x[1] : '';
         var rgx = /(\d+)(\d{3})/;
         while (rgx.test(x1)) {
             x1 = x1.replace(rgx, '$1' + ',' + '$2');
         }
         return x1 + x2;
}

1 Ответов

Рейтинг:
6

Sandeep Mewara

Попробуй:
Вариант 1:

function numberWithCommas(x) {
    return x.toString().replace(/\B(?=(\d{3})+(?!\d))/g, ",");
}

Вариант 2:
Воспользуйся Количество.прототип.методом tolocalestring[^].
Он был реализован в JavaScript 1.5 (представлен в начале 1999 года), поэтому должен поддерживаться всеми браузерами.
var n = 12345678.123
n.toLocaleString() // return "12,345,678.123"


GinCanhViet

Эта опция 1 функция добавляет запятые в нежелательных местах если после десятичной точки стоит более 3 цифр

Sandeep Mewara

Попробуй:
функция numberWithCommas(n) {
ВАР частей=Н.метод toString().сплит(".");
возврата части[0].заменить(/\Б(?=выражение (\D{3})+(?!\г))/г, ",") + (частей[1] ? "." + запчасти[1] : "");
}