Просто замените оба знака плюс на {1,3)
:
/^(0(.\d{1,3})?|1(.0{1,3})?)$/
Это гарантирует, что между каждой десятичной дробью будет от 1 до 3 цифр:
const regex = /^(0(.\d{1,3})?|1(.0{1,3})?)$/;
const amounts = [
"0.001",
"0.320",
"0.009",
"0.0",
"0.3",
"0.9",
"0.",
"0.0000",
"1.",
"1.000",
"1.0000"
]
amounts.forEach(function(amount) {
console.log(amount, "=", regex.test(amount));
});
Это также можно увидеть, работая над Regex101 здесь .