For example… (this fails)
const currencyMap = { "$": "USD", "€": "EUR", }; const r = '$100'.replace(/($)([0-9]*)/g, `${currencyMap[$1]}$2`); console.log(r);
Is there a way to make this sort of thing work?
$1
is available when it’s used in a string, but not as a key.
Advertisement
Answer
Unfortunately no, you’ll have to use a replacer function instead:
const currencyMap = { "$": "USD", "€": "EUR", }; const r = '$100'.replace(/($)(d*)/g, (_, $1, $2) => currencyMap[$1] + $2); console.log(r);
Also note that you can use d
instead of [0-9]
instead, it makes the regex a bit nicer to read.
If you don’t actually need the second group for something special, you can just echo back the match in the object:
const currencyMap = { "$": "USD", "€": "EUR", }; const r = '$100'.replace(/[$€]/g, match => currencyMap[match]); console.log(r);