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,優(yōu)先匹配reg1,加上?:不對捕獲組記錄
- .0* - 表示匹配一個.開頭,后邊跟著0或0個以上數(shù)量的0,且不進行捕獲,所以在填充$1時,就是個空值
- (.\d+?)0+ - 它是一個捕獲組,匹配一個.開頭后邊跟著非貪婪(懶惰)匹配任意數(shù)字,接著在末尾盡可能多的匹配0這個字符,匹配完成后,生成一個捕獲組內(nèi)容
- $ - 表示匹配結(jié)果需要以0作為結(jié)尾