Перенос чисел слева от символа

#javascript #jquery #regex

#javascript #jquery #регулярное выражение

Вопрос:

Чтобы добавить запятые в числовую строку, я использую следующее:

someNum.toString().replace(/B(?=(?:d{3}) (?!d))/g, ",")

Мне нужно сделать одну дополнительную вещь. Мне нужно перенести все слева от запятой (все числа, представляющие тысячи или выше в span теге, чтобы раскрасить эти числа.

Итак, если someNum is 42221 , то вывод должен быть <span class="someColorClass">42</span>,221 , и если someNum был 221 , то вывод был бы 221 .

Спасибо!

Ответ №1:

Я не знаю, самый ли это эффективный способ, но это работает:

 someNum.toString().replace(/B(?=(?:d{3}) (?!d))/g, ",").replace(/^(.*),(d )$/,'<span class="someColorClass">$1</span>,$2')

123456789 = <span class="someColorClass">123,456</span>,789
42221 = <span class="someColorClass">42</span>,221
221 = 221
  

Комментарии:

1. 1 для передачи ситуаций, превышающих тысячи. Обратите внимание, что ни код из OP, ни этот ответ не содержат десятичных знаков. Это строго для целых чисел.

Ответ №2:

Предполагая, что вы никогда не переходите к миллионам, после первоначальной замены вы можете просто сделать:

 someNum = someNum.replace(/(d*)(,d{3})/g, '<span class="someColorClass">$1</span>$2');
  

Комментарии:

1. Это решение недальновидно.

Ответ №3:

С помощью двух регулярных выражений:

 var someNum = 12345;
var commaNum = someNum.toString().replace(/B(?=(?:d{3}) (?!d))/g, ",").replace(/^(d ),/,"<span>$1</span>,");
alert(commaNum);
  

Не удалось бы выделить тысячи, если бы они исчислялись миллионами.

Пример

Если число может быть больше 99 999, вы можете использовать это регулярное выражение, которое соответствует чему угодно. Это будет включать запятые внутри соответствия.

 var someNum = 12345;
var commaNum = someNum.toString().replace(/B(?=(?:d{3}) (?!d))/g, ",").replace(/^([d,] )(,d{3})/g,"<span>$1</span>$2");
alert(commaNum);
  

Пример

Комментарии:

1. It would fail highlighting the thousands if it is in the millions. Тогда это неправильное решение.

Ответ №4:

Другой подход, проверка длины строки…

 var num = "432232121678";
var num2 = "221";

function Parse(num)
{
    var thousand = num.substring(0, num.length - 3);
    if (thousand.length > 0)
    {
        return "<span class="someColorClass">"   thousand.replace(/B(?=(?:d{3}) (?!d))/g, ",")   "</span>,"   num.substring(num.length - 3)
    }
    return num;
}

Parse(num);
Parse(num2);
  

Вывод

 "<span class="someColorClass">432,232,121</span>,678"
"221"
  

Смотрите этот пример на jsFiddle