想用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作为结尾
慕田峪7331174
TA贡献1828条经验 获得超13个赞
换个思路行不行?
既然不换思路,换个代码行不行?
str.replace(/\.\d+0+/, () => str.match(/\.\d+0+/)[0].replace(/0+$/, ''));
添加回答
举报
0/150
提交
取消