为了账号安全,请及时绑定邮箱和手机立即绑定

js 怎样用正则去掉小数点后面多于的0

js 怎样用正则去掉小数点后面多于的0

凤凰求蛊 2019-03-08 19:11:34
想用replace替换掉小数点后面多于的0.例如: 12.000700 ——————> 12.0007注意:若是没有小数点的话,匹配不生效,不替换任何字符。[补充内容]感谢各位老哥的回答。但是可能我对问题的描述不够全面。1.(不希望转为数字)我的整个数值计算是字符串按位计算的,所以我并不希望将他转为数字,而是通过正则的方式去掉多余的0。不愿意转换也有一点是String/Number等方法对小数点后面的位数有限制。2.(需要考虑没有小数点的情况)/0*$/或者/0+$/这种单纯的匹配末尾是不全面的。可能有没有小数点的存在。并不希望: 12000 ——————> 12这明显改变了数值3.(目前想到的方法)目前的能想到的用了两个replace一个match。先匹配到小数点右面的字符。再将该字符去末尾0替换到小数点右面。显然不高级,有没有更优雅的写法。var str = "12.000700";var _tmp = str.match(/\.\d+0+/)[0].replace(/0+$/,'');console.log(str.replace(/\.\d+0+/, _tmp));
查看完整描述

4 回答

?
ITMISS

TA贡献1871条经验 获得超8个赞

const arr=['1200.00100','1200.00000','1200.','1200','1200.10000','0.120010000','0.000011111']

const regexp=/(?:\.0*|(\.\d+?)0+)$/

arr.forEach((item)=>{

    console.log(item.replace(regexp,'$1'))

})


// > 1200.001

// > 1200

// > 1200

// > 1200

// > 1200.1

// > 0.12001

// > 0.000011111

再解释下正则的意思(?:\.0*|(\.\d+?)0+)$


先分解成4部分


(?:reg1|reg2) - 它是一个正则分组非捕获组,要么匹配reg1,要么匹配reg2,优先匹配reg1,加上?:不对捕获组记录

\.0* - 表示匹配一个.开头,后边跟着0或0个以上数量的0,且不进行捕获,所以在填充$1时,就是个空值

(\.\d+?)0+ - 它是一个捕获组,匹配一个.开头后边跟着非贪婪(懒惰)匹配任意数字,接着在末尾尽可能多的匹配0这个字符,匹配完成后,生成一个捕获组内容

$ - 表示匹配结果需要以0作为结尾


查看完整回答
1 反对 回复 2019-03-14
?
慕田峪7331174

TA贡献1828条经验 获得超13个赞

换个思路行不行?

https://img1.sycdn.imooc.com//5c89b1f50001576101550042.jpg

既然不换思路,换个代码行不行?

str.replace(/\.\d+0+/, () => str.match(/\.\d+0+/)[0].replace(/0+$/, ''));


查看完整回答
反对 回复 2019-03-14
  • 4 回答
  • 0 关注
  • 3994 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信