Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Разделение разрядов чисел с дробной частью (https://javascript.ru/forum/misc/39617-razdelenie-razryadov-chisel-s-drobnojj-chastyu.html)

Demath 05.07.2013 17:36

Разделение разрядов чисел с дробной частью
 
Помогите доделать регулярное выражение для разделение разрядов чисел пробелами, чтобы не разделялись цифры в дробной части чисел. Туплю (

var str = "940451226.45678";
alert(str.replace(/(\d)(?=(\d\d\d)+([^\d]|$))/g, '$1 '));

Отсюда http://javascript.ru/forum/project/3...tml#post188039

Dim@ 05.07.2013 18:21

Demath,
var str = "940451226.45678";
alert(str.replace(/(\.\d*)|(\d)(?=(\d\d\d)+([^\d]|$))/g, '$1 '));

Demath 05.07.2013 18:39

Dim@,

Оно что-то некоторые цифры кушает (

94 45 226.45678 != 940 451 226.45678

pikko 05.07.2013 19:44

универсальный регексп для дробных и целых не получается придумать
вот только для дробных

var str = "940451226.45678";
alert( str.replace(/(\d)(?=(?:\d{3})+\.)/g, '$1 ') );

pikko 05.07.2013 20:46

function splitNumberWithSpaces ( str ) {
    return str.replace(
        (
            /\./.test(str)
                ? /(\d)(?=(?:\d{3})+\.)/g
                : /(\d)(?=(?:\d{3})+$)/g
        ), '$1 '
    );
}

alert( splitNumberWithSpaces('940451226.45678') );
alert( splitNumberWithSpaces('940451226') );


это, конечно, гон, но работает =)

Demath 06.07.2013 02:31

pikko, оно разделяет разряды только целых или только дробных.


Получилось вторым replace удалять пробелы в дробных частях после работы первого replace )
если в дробной части не более 6-ти цифр.


var str = "940451226.45678++25287++9451226++25287.15875";
alert( str.replace( /(\d)(?=(\d{3})+([^\d]|$))/g, '$1 ' ).replace( /(\.\d+) (\d+)/g, '$1$2' ) );

pikko 06.07.2013 11:43

потому что оно расчитано на одно число, а не на строку с числами

pikko 06.07.2013 13:41

var str="word word 1234567 more words 12345678.12345 and 123456 and 1234567890.1234567 some word";

function splitAllNumbersWithSpacesInString ( str ) {
    str = str.replace(/(\d)(?=(?:\d\d\d)+(?:\D|$))/g, '$1 ');
    return (function delSpaces (str){
        var strNew = str.replace(/(\.\d+)\s(\d+)/g, '$1$2');
        return strNew === str ? strNew : delSpaces(strNew);
    })(str);
}

alert( splitAllNumbersWithSpacesInString(str) );

рони 06.07.2013 14:12

разделение целой части числа на 3
 
:write:
var str = "word word 1234567 more words 12345678.12345 and 123456 and 1234567890.1234567 some word";
alert(str.replace(/(\d+)(\.\d+)?/g, function (c, b, a) {
    return b.replace(/(\d)(?=(\d{3})+$)/g, "$1 ") + (a ? a : "")
}))

Demath 06.07.2013 14:17

pikko,

спасибо :thanks:

не догоняю, как 2-й replace парсит пробелы в дробной части, если в ней более одного пробела?
например, для этого 1234.12 345 и этого 1234567890.123 456 регулярка понятна,
а в этом 1234567890.1 234 567 как?


Часовой пояс GMT +3, время: 01:38.