Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 05.07.2013, 17:36
Аватар для Demath
Профессор
Отправить личное сообщение для Demath Посмотреть профиль Найти все сообщения от Demath
 
Регистрация: 22.06.2012
Сообщений: 168

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

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

Отсюда Разделение разрядов числа пробелами.
Ответить с цитированием
  #2 (permalink)  
Старый 05.07.2013, 18:21
Аватар для Dim@
Профессор
Отправить личное сообщение для Dim@ Посмотреть профиль Найти все сообщения от Dim@
 
Регистрация: 21.04.2012
Сообщений: 951

Demath,
var str = "940451226.45678";
alert(str.replace(/(\.\d*)|(\d)(?=(\d\d\d)+([^\d]|$))/g, '$1 '));
Ответить с цитированием
  #3 (permalink)  
Старый 05.07.2013, 18:39
Аватар для Demath
Профессор
Отправить личное сообщение для Demath Посмотреть профиль Найти все сообщения от Demath
 
Регистрация: 22.06.2012
Сообщений: 168

Dim@,

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

94 45 226.45678 != 940 451 226.45678
Ответить с цитированием
  #4 (permalink)  
Старый 05.07.2013, 19:44
Аватар для pikko
Аспирант
Отправить личное сообщение для pikko Посмотреть профиль Найти все сообщения от pikko
 
Регистрация: 06.10.2012
Сообщений: 60

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

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

Последний раз редактировалось pikko, 05.07.2013 в 20:59.
Ответить с цитированием
  #5 (permalink)  
Старый 05.07.2013, 20:46
Аватар для pikko
Аспирант
Отправить личное сообщение для pikko Посмотреть профиль Найти все сообщения от pikko
 
Регистрация: 06.10.2012
Сообщений: 60

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

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


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

Последний раз редактировалось pikko, 05.07.2013 в 21:02.
Ответить с цитированием
  #6 (permalink)  
Старый 06.07.2013, 02:31
Аватар для Demath
Профессор
Отправить личное сообщение для Demath Посмотреть профиль Найти все сообщения от Demath
 
Регистрация: 22.06.2012
Сообщений: 168

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' ) );

Последний раз редактировалось Demath, 06.07.2013 в 02:42.
Ответить с цитированием
  #7 (permalink)  
Старый 06.07.2013, 11:43
Аватар для pikko
Аспирант
Отправить личное сообщение для pikko Посмотреть профиль Найти все сообщения от pikko
 
Регистрация: 06.10.2012
Сообщений: 60

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

Последний раз редактировалось pikko, 06.07.2013 в 11:46.
Ответить с цитированием
  #8 (permalink)  
Старый 06.07.2013, 13:41
Аватар для pikko
Аспирант
Отправить личное сообщение для pikko Посмотреть профиль Найти все сообщения от pikko
 
Регистрация: 06.10.2012
Сообщений: 60

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) );
Ответить с цитированием
  #9 (permalink)  
Старый 06.07.2013, 14:12
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,064

разделение целой части числа на 3

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 : "")
}))

Последний раз редактировалось рони, 26.03.2016 в 23:21.
Ответить с цитированием
  #10 (permalink)  
Старый 06.07.2013, 14:17
Аватар для Demath
Профессор
Отправить личное сообщение для Demath Посмотреть профиль Найти все сообщения от Demath
 
Регистрация: 22.06.2012
Сообщений: 168

pikko,

спасибо

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

Последний раз редактировалось Demath, 06.07.2013 в 14:20.
Ответить с цитированием
Ответ


Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Разделение разрядов числа пробелами. Kolyaj Ваши сайты и скрипты 17 12.03.2020 15:57