[JavaScript] 利用正则表达式将浮点数的整数部分每三位添加一个逗号,如1234567.12转换为1,234,567.12

String.prototype.repace(param1, param2)方法可以替换字符串中的一部分内容为指定的内容。
第一个参数是原字符串中将要被替换的内容,可以是字符串,也可以是正则匹配,如果是字符串的话,只能替换一个地方;如果是正则表达式并且开启了全局标志的话可以替换所有匹配到的地方。
第二个参数是要替换成的内容,可以是字符串,也可以是回调函数。

接下来看一下题目’1234567.12’转换为’1,234,567.12’
其实并没有将原字符串的某些内容替换成逗号,而是在一些位置插入了一个逗号。
使用replace也是可以使用的。

先看下面的例子。不就是在开头的位置插入了一个逗号吗,被匹配的内容是空串,原串的开头就相当于空串,所以匹配到了,将开头的空串替换成了逗号。

var str = 'hhh'
var str2 = str.replace('', ',')
console.log(str2) // ,hhh

再看下面的例子。
replace的第一个参数是一个正则表达式,这个正则表达式中有一写特殊字符, 先介绍一下。
x(?=y): 匹配’x’仅仅当’x’后面跟着’y’.这种叫做先行断言。注意y不是匹配的结果哦,会匹配后面紧跟着y的x,但是y并不是匹配结果的一部分。
^: 匹配输入的开始。比如:/^A/并不会匹配 “an A” 中的 ‘A’,但是会匹配 “An E” 中的 ‘A’。
所以下面的/(?=^)/就表示匹配字符串开头的空。结果就和上面一样拉。

var str = 'hhh'
var str2 = str.replace(/(?=^)/g, ',')
console.log(str2) // ,hhh

再看下面的例子。
匹配a(并且后面必须是a),将a替换为逗号
前面7个a都满足正则条件,都被匹配到并替换成了逗号

console.log('aaaaaaaa'.replace(/a(?=a)/g, ',')) // ,,,,,,,a

再看下面的例子
匹配空(且后面必须是aba,一定要注意aba不是匹配结果的一部分),并将空替换成逗号

console.log('ababa'.replace(/(?=aba)/g, ',')) // ,ab,aba
console.log('ababa'.replace(/aba/g, ','))  // ,ba

继续
有了上面的铺垫,下面的例子(已经接近题目要求拉)不难看懂。
匹配空(且后面必须紧跟3的倍数个数字加一个小数点),并将空替换成逗号
2前面的空,5前面的空都是满足正则的,所以替换成了逗号

console.log( '1234567.90'.replace(/(?=(\d{3})+\.)/g, ",") ) // 1,234,567.90

上面的例子有个问题。如果整数部分刚好有3的倍数个数字的话,最前面会有一个逗号。

console.log( '123456789.90'.replace(/(?=(\d{3})+\.)/g, ",") ) // ,123,456,789.90

再修改修改
x(?!y): 仅仅当’x’后面不跟着’y’时匹配’x’,这被称为正向否定查找。
所以(?!^)表示匹配一个空,且这个空的后面不能是输入的开头
(?!^)(?=(\d{3})+\.)连起来可以理解为前面一部分匹配到的空(不是开头的空),后面必须有3的倍数个数字和小数点。

console.log( '123456789.90'.replace(/(?!^)(?=(\d{3})+\.)/g, ",") ) // 123,456,789.90

上面和下面是类似的

console.log('ababa'.replace(/(?!^)(?=aba)/g, ',')) // ab,aba

至此 就实现了利用正则表达式将浮点数的整数部分每三位添加一个逗号

如果对正则表达式中的特殊符号不了解,如x(?!y)。参考

https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Guide/Regular_Expressions

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值