Разделение разрядов чисел с дробной частью
Помогите доделать регулярное выражение для разделение разрядов чисел пробелами, чтобы не разделялись цифры в дробной части чисел. Туплю (
var str = "940451226.45678"; alert(str.replace(/(\d)(?=(\d\d\d)+([^\d]|$))/g, '$1 ')); Отсюда http://javascript.ru/forum/project/3...tml#post188039 |
Demath,
var str = "940451226.45678"; alert(str.replace(/(\.\d*)|(\d)(?=(\d\d\d)+([^\d]|$))/g, '$1 ')); |
Dim@,
Оно что-то некоторые цифры кушает ( 94 45 226.45678 != 940 451 226.45678 |
универсальный регексп для дробных и целых не получается придумать
вот только для дробных
var str = "940451226.45678";
alert( str.replace(/(\d)(?=(?:\d{3})+\.)/g, '$1 ') );
|
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, оно разделяет разряды только целых или только дробных.
Получилось вторым 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' ) );
|
потому что оно расчитано на одно число, а не на строку с числами
|
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) );
|
разделение целой части числа на 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 : "")
}))
|
pikko,
спасибо :thanks: не догоняю, как 2-й replace парсит пробелы в дробной части, если в ней более одного пробела? например, для этого 1234.12 345 и этого 1234567890.123 456 регулярка понятна, а в этом 1234567890.1 234 567 как? |
| Часовой пояс GMT +3, время: 19:25. |