[Demo](https://codepen.io/LazyYouth_L/pen/jORKbOd) 你这个正则其实没问题,有问题的是e.target.value这里赋值 // 此时input框内是"123." // 而e.target.value = 123,小数点被省略掉了 // 123值不符合该正则的条件,所以replace未执行 e.target.value = e.target.value.replace(/(\.\d{0,3})\d*$/,function(match){ // 这句并未被执行 console.log(111) return '$1' }) // 等同于 e.target.value = e.target.value // 因为e.target.value在这里被重新赋值,所以input的内容123.也被更新为了e.target.value的值123 所以改成下面这样就行了 if(/\./.test(e.target.value)){ e.target.value = e.target.value.replace(/(\.\d{0,3})\d*$/,'$1') }