Разделение разрядов чисел с дробной частью
Помогите доделать регулярное выражение для разделение разрядов чисел пробелами, чтобы не разделялись цифры в дробной части чисел. Туплю (
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, время: 20:18. |