Пользовательское регулярное выражение для форматирования числа - PullRequest
0 голосов
/ 23 ноября 2018

у меня есть этот номер 1234567890

вот как я хочу его отобразить

1234 567 890

я пытаюсь это

console.log('1234567899'.replace(/(\d)(?=(\d{3})+$)/g, '$1 '));

Ответы [ 4 ]

0 голосов
/ 23 ноября 2018

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

Совпадение /(^\d{4}|\d{3})(?=(\d{3})*$)/g и замена на $1

Вот пример кода JavaScript,

console.log('1234567899' + ' --> ' + '1234567899'.replace(/(^\d{4}|\d{3})(?=(\d{3})*$)/g, '$1 '));
console.log('12345678991' + ' --> ' + '12345678991'.replace(/(^\d{4}|\d{3})(?=(\d{3})*$)/g, '$1 '));
console.log('123456789912' + ' --> ' + '123456789912'.replace(/(^\d{4}|\d{3})(?=(\d{3})*$)/g, '$1 '));
console.log('1234567899123' + ' --> ' + '1234567899123'.replace(/(^\d{4}|\d{3})(?=(\d{3})*$)/g, '$1 '));
0 голосов
/ 23 ноября 2018

Один из вариантов - иметь необязательную группу, которая начинается в начале строки и (жадно) соответствует числу начальных цифр без запятых, которое вы хотите иметь.Затем вместо замены просто \1 замените на \1\2 (необязательная группа плюс вторая захваченная цифра):

const format = str => str.replace(
  /(^(?:\d{1,2}))?(\d{1,3})(?=(?:\d{3})+$)/g,
  //       ^^^ change these to change the number of unbroken leading digits
  '$1$2 '
);

console.log(format('1234567899'));
console.log(format('01234567899'));
console.log(format('101234567899'));

Необязательная группа приведенного выше фрагмента начинается с \d{1,2}, что означает, что будет от 3 до 5 начальных цифр, не разбитых запятыми.Чтобы изменить это количество, просто измените количество повторений.

Начальная группа (^(?:\d{1,2}))? означает: необязательно, начало строки, за которым следуют одна или две цифры.

0 голосов
/ 23 ноября 2018
  • Разделите вашу строку на 2 части.
      1. Строка содержит пробел после 4 цифр
    • Строка содержит пробел после 3 цифр.
Добавить пробел после n цифр

Попробуйте с этим

var str = "1234567890";
var temp = str.substring(0,4); // get first 4 digits
//Add space after 3 digits. You can use same logic to add space after 4 digits as well
var z = [...str.substring(4)].map((d, i) => i % 3 == 0 ? ' '+d : d).join('').trim();

//Concatenate both strings
var result = temp + ' ' + z;

//Display result 
console.log(temp);
console.log(z);
console.log(result);
0 голосов
/ 23 ноября 2018

Вы можете сделать это так.

let number = '1234567890';
let result = number.replace(/(\d{4})(\d{3})(\d{3})/, "$1 $2 $3");
console.warn(result);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...