正则表达式相关应用

正则表达式相关应用

正则表达式相关应用

JavaScript实现千分位分隔符

1.

使用js自带函数toLocaleString
Array.prototype.toLocaleString()
toLocaleString() 返回一个字符串表示数组中的元素。数组中的元素将各自使用toLocaleString()方法转换成字符串,这些字符串将使用一个特定环境的字符串(例如一个逗号 “,”)隔开。

1
2
3
let a = 1234546435
a.toLocaleString()
//'1,234,546,435'

2.

1
2
3
4
const toMoney = (num) => {
const str = num + ''
return str.replace(/\B(?=(\d{3})+(?!\d))/g, ',')
}

  • str.replace(/\B(?=(\d{3})+(?!\d))/g, ','); 使用正则表达式替换数字字符串中的位置,以在每三位数字之间插入逗号。这个正则表达式使用了零宽断言(lookahead assertion),确保只有在数字的后面插入逗号,而不是在小数点后面。

    • \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})? 匹配正整数或带有两位小数的小数。
  • $ 表示匹配字符串的结束。
作者

colin-dong

发布于

2023-04-06

更新于

2024-01-12

许可协议

评论