Sé que esto se ha preguntado muchas veces y encontré una solución, value.replace(/^([\d,]+)$|^([\d,]+)\.0*$|^([\d,]+\.[0-9]*?)0*$/, "$1$2$3") .
Pero... no soy un experto en expresiones regulares, así que tengo curiosidad por saber por qué esto no funciona /[\.0]+$/ ... 10 debería devolver 10 pero simplemente no sé cómo excluye los números enteros que terminan en 0.
1.7500, 1.1010, 1.0000, 10
1.75, 1.101, 1, 1
Puede acortar el patrón para hacer coincidir un punto con solo ceros, o usar una coincidencia no codiciosa para los dígitos con un grupo de captura y hacer coincidir los ceros finales opcionales.
Si desea hacer coincidir los dígitos y las comas, el primer \d+ también puede ser [\d,]+ como ya tiene en su patrón.
Si debe haber al menos un solo dígito después del punto, entonces el cuantificador puede ser un signo más .\d+?
^(\d+)(?:\.0+|(\.\d*?)0+)$Vea una demostración de regex 101 .
[ "1.7500", "1.1010", "1.0000", "10" ].forEach(s => console.log(s.replace(/^(\d+)(?:\.0+|(\.\d*?)0+)$/, "$1$2")) );