在 JS 中将转义的 unicode 序列转换为表情符号

Convert escaped unicode sequence to Emoji in JS

我在JS中有一个字符串如下。我很难将这些替代对转换为表情符号。有人可以帮忙吗?

我试图通过搜索几乎所有可能的内容来在线获得解决方案,但徒劳无功。

var text = 'CONGRATS! Your task has been completed! Tell us how we did \uD83D\uDE4C \uD83D\uDC4D \uD83D\uDC4E'

这是一个 node.js 代码。有什么简单的方法可以在不使用外部辅助实用程序的情况下将这些代码转换为表情符号吗?

编辑:

我更新了我的代码和正则表达式如下:

var text = 'CONGRATS! Your task has been completed! Tell us how we did {2722} {1F44D} {1F44E}';

text.replace(/\{[^}]*\}/ig, (_, g) => String.fromCodePoint(`0x${g}`))

我做错了什么?

一种选择是将所有 Unicode 转义序列替换为十六进制表示,并使用 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,即:

  1. \{ - 匹配左花括号。
  2. ([^}]*) - 匹配并 group 左花括号之后的内容,而不是闭花括号 }.
  3. } - 匹配一个闭合的大括号。
  4. 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);