Один из вариантов может состоять в том, чтобы заменить все escape-последовательности Unicode их HEX-представлениями и использовать String.fromCharCode()
, чтобы заменить его ассоциированным символом:
const text = 'CONGRATS! Your task has been completed! Tell us how we did \\uD83D\\uDE4C \\uD83D\\uDC4D \\uD83D\\uDC4E';
const res = text.replace(/\\u([0-9A-F]{4})/ig, (_, g) => String.fromCharCode(`0x${g}`));
console.log(res);
Что касается вашего редактирования, ваша проблема связана с вашим регулярным выражением. Вы можете изменить его на /\{([^}]*)\}/g
, что означает:
\{
- сопоставить открытую фигурную скобку. ([^}]*)
- сопоставить и group содержимое после открытой фигурной скобки, которая не является закрытой фигурной скобкой }
. }
- соответствует закрытой фигурной скобке. g
- соответствует выражению глобально ( поэтому все вхождения выражения, а не только первое)
Полное регулярное выражение будет соответствовать {CONTENTS}
, тогда как группа будет содержать только содержимое между двумя фигурными скобками, поэтому CONTENTS
. Соответствие является первым аргументом, предоставляемым функции обратного вызова .replace()
, тогда как группа (g
) предоставляется в качестве второго аргумента и используется нами:
const text = 'CONGRATS! Your task has been completed! Tell us how we did {2722} {1F44D} {1F44E}';
const res = text.replace(/\{([^}]*)\}/g, (_, g) => String.fromCodePoint(`0x${g}`));
console.log(res);