Estoy usando esta declaración RegEx...
/\((\$.*?)\)/g
…para ubicar todos los montos en dólares entre paréntesis que se encuentran en una cadena como esta…
"Mis 3 comidas fueron bastante baratas ($ 45), pero terminé gastando mucho más ($ 1532.01) de lo que esperaba".
¿Qué declaración RegEx modificaría la oración fuente para que todas las cantidades entre paréntesis tuvieran el formato adecuado para incluir dos lugares decimales y comas donde fuera necesario?
"Mis 3 comidas fueron bastante baratas ($45,00) pero terminé gastando mucho más ($1,532.01) de lo que esperaba".
Para aclarar, el objetivo no es extraer los valores con el formato adecuado (por ejemplo, en una matriz); es cambiar la oración para que muestre el formato adecuado.
Puedes usar
const str = 'My 3 meals were fairly cheap ($45) but I ended up spending a lot more ($1532.01) than I anticipated'; const regex = /\$(\d+(?:\.\d+)?)/g; console.log( str.replace(regex, (m,g) => '$' + Number(g).toLocaleString('en-US', { minimumFractionDigits: 2 })) )Vea la demostración de expresiones regulares .
Producción:
My 3 meals were fairly cheap ($45.00) but I ended up spending a lot more ($1,532.01) than I anticipated La expresión regular \$(\d+(?:\.\d+)?) coincide con un $ y luego captura en el Grupo 1 uno o más dígitos seguidos de una secuencia opcional de un . y uno o más dígitos.
En el reemplazo, se usa una función de flecha de devolución de llamada para agregar el número modificado al carácter $ para formar la cadena de reemplazo.