Созрела необходимость разделять визуально разряды в цифрах превышающих 3 знака, 1000 и больше. Разбиваем спец символом по 3 цифры.
Т.к. в регулярках, я пока ещё плаваю сильно, решил написать решение по своему. Он работает там где в теге с нужным значением присутствует специальный атрибут.
$(document).ready(function(){$('*[separation]').separation();});
$.fn.separation = function(){ // separation - имя атрибута
var target = this.text(); // берём строку
var len = target.length; // получаем её длину
var b = []; //создаём массив
if(len > 3){ //проверяем, нужно ли обрабатывать строку
var count = parseInt(len/3); // получаем количество троек (3 цифры)
var start = len % 3; // берём первые цифры
var a = target.slice(0, start); // записываем их
for(var i = 0; i<count; i++){ // пробегаемся по полученным тройкам
if(i == 0){ //первая итерация
b.push(target.slice(start, start+3)); //записываем в массив
var index = start+3; // записываем индекс цифры, на которой остановились
} else { // остальные итерации
b.push(target.slice(index, index+3)); // аналагично записываем в массив
index = index+3;
};
};
this.html(a+' '+ b.join(' ')); //собираем всё и единожды обращаемся к DOM-дереву и записываем результат с разделителем
}
}
Минусы:
1) громоздко
2) тег с рабочим атрибутом должен оборачивать только цифры (тег любой, но span предпочтительнее, т.к. не меняет визуальное отображение)
Плюсы:
1) можно указывать любой разделитель
2) Слышал мнение, что циклы быстрее регулярки (кстати, так ли это?)
3) написал сам, для развития хорошо (но это личный плюс)
В итоге, когда у нас есть строка <span separation>1000000</span>, на выходе мы получаем 1 000 000.
Вариант с регуляркой нашёл позже, вот он:
var str = 'Lorem ipsum 234456234 Lorem ipsum 7345287346 asdfae';
alert(str.replace(/(\d)(?=(\d\d\d)+([^\d]|$))/g, '$1 '));
Есть предложения по улучшению, замечания?