正则表达式零宽度正预测先行断言

看名字一脸懵逼,完全不知道这是什么鬼。先看看是什么样的

 (?=exp)

它表示匹配exp前面的内容。

还是不太明白,到底是个啥,举个例子吧。[a-zA-Z]+(?=\d+)表示的匹配数字前面的字母,比如,给定字符串abc123,匹配的结果则为abc,那么exp代表的是\d+,而以外的[a-zA-Z]的匹配结果则为abc,这下看起来是不是清楚多了。

利用这个零宽断言,可以来实现一个千分位转换的小demo

const converPrice = (num) => {
  if (!num) return '0.00'
  let str = parseFloat(num).toFixed(2)
  return str && str
    .toString()
    .replace(/(\d)(?=(\d{3})+\.)/g, ($0, $1) => {
      return $1 + ','
    })
}

输入converPrice('12121831.99'),输出结果为12,121,831.99

如果您觉得本文对您有用,欢迎捐赠或留言~
微信支付
支付宝

发表评论

您的邮箱地址不会被公开。 必填项已用 * 标注