正则表达式相关应用
JavaScript实现千分位分隔符
1.
使用js自带函数toLocaleString
Array.prototype.toLocaleString()
toLocaleString()
返回一个字符串表示数组中的元素。数组中的元素将各自使用toLocaleString()
方法转换成字符串,这些字符串将使用一个特定环境的字符串(例如一个逗号 “,”)隔开。
1 2 3
| let a = 1234546435 a.toLocaleString()
|
2.
1 2 3 4
| const toMoney = (num) => { const str = num + '' return str.replace(/\B(?=(\d{3})+(?!\d))/g, ',') }
|
3.
1 2 3 4 5 6 7 8 9
| function numFormat(num){ var res=num.toString().replace(/\d+/, function(n){ return n.replace(/(\d)(?=(\d{3})+$)/g,function($1){ return $1+","; }); }) return res; }
|
replace(/\d+/, function(n) {...})
用于替换整数部分。
\d+
匹配一个或多个数字。
function(n) {...}
是一个回调函数,用于处理匹配的整数部分。
n.replace(/(\d)(?=(\d{3})+$)/g, function($1) {...})
用于在整数部分的每三位数字之间插入逗号。
(\d)
匹配一个数字,并将其捕获为第一个捕获组。
(?=(\d{3})+$)
是一个正向预测先行断言,匹配整数部分的每三位数字的位置。
function($1) {...}
是一个回调函数,用于在匹配的数字前面插入逗号。
百分数
1 2 3 4 5
| const formatter = (value) => value.replace( /^(-|(?!([1-9]\d?(\.\d{1,2})?|100(\.00?)?)$)\d+(\.\d{1,2})?)$/, value.substr(0, value.length - 1) || '' )
|
正则表达式的解释:
^
表示匹配字符串的开始。
(-|(?!...))
是一个组,匹配负数或者不满足后面条件的数字。
(?!...)
是负向预测先行断言,用于排除某些情况。
([1-9]\d?(\.\d{1,2})?|100(\.00?)?)
匹配一个合法的数字,可以是整数或带有两位小数的小数,最大值为 100。
\d+(\.\d{1,2})?
匹配正整数或带有两位小数的小数。
$
表示匹配字符串的结束。