自定义正则表达式以格式化数字

时间:2018-11-23 06:32:07

标签: javascript angularjs regex

我有这个号码 1234567890

这就是我要显示的方式

1234 567 890

我正在尝试

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

4 个答案:

答案 0 :(得分:2)

一个选择是拥有一个可选的组,该组从字符串的开头开始,并且(贪婪地)匹配您想要的前导位数而不带逗号。然后,不要只用\1来代替,而要用\1\2来代替(可选组 plus 第二个捕获的数字):

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}))?的意思是:可选地,字符串的开头,后跟一个或两个数字。

答案 1 :(得分:0)

您可以使用这种方式。

let number = '1234567890';
let result = number.replace(/(\d{4})(\d{3})(\d{3})/, "$1 $2 $3");
console.warn(result);

答案 2 :(得分:0)

  • 将您的字符串分成两部分。
      1. 字符串包含4位数字后的空格
      1. 字符串包含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);

答案 3 :(得分:0)

请尝试使用此正则表达式,以确保将数字分为三组,但第一个数字可以从四到五分组。

匹配/(^\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 '));