是否可以在字符串模板中插入 Javascript 正则表达式匹配?

GN.*_*GN. 5 javascript regex

例如...(这失败了)

\n\n

\r\n
\r\n
const currencyMap = {\r\n  "$": "USD",\r\n  "\xe2\x82\xac": "EUR",\r\n};\r\n\r\nconst r = \'$100\'.replace(/(\\$)([0-9]*)/g, `${currencyMap[$1]}$2`);\r\nconsole.log(r);
Run Code Online (Sandbox Code Playgroud)\r\n
\r\n
\r\n

\n\n

有没有办法让这种事情起作用? \n$1在字符串中使用时可用,但不能用作键。

\n

Cer*_*nce 3

不幸的是,不行,您必须使用替换函数:

\n\n

\r\n
\r\n
const currencyMap = {\r\n    "$": "USD",\r\n    "\xe2\x82\xac": "EUR",\r\n};\r\n\r\nconst r = \'$100\'.replace(/(\\$)(\\d*)/g, (_, $1, $2) => currencyMap[$1] + $2);\r\nconsole.log(r);
Run Code Online (Sandbox Code Playgroud)\r\n
\r\n
\r\n

\n\n

另请注意,您可以使用\\d代替[0-9],它使正则表达式更易于阅读。

\n\n

如果您实际上不需要第二组来做特殊的事情,您可以只回显对象中的匹配:

\n\n

\r\n
\r\n
const currencyMap = {\r\n    "$": "USD",\r\n    "\xe2\x82\xac": "EUR",\r\n};\r\n\r\nconst r = \'$100\'.replace(/[$\xe2\x82\xac]/g, match => currencyMap[match]);\r\nconsole.log(r);
Run Code Online (Sandbox Code Playgroud)\r\n
\r\n
\r\n

\n

  • 在这两种情况下,替换函数都是“.replace”的第二个参数。第一个函数是 `(_, $1, $2) =>currencyMap[$1] + $2` (2认同)