【问题标题】:Convert escaped unicode sequence to Emoji in JS在 JS 中将转义的 unicode 序列转换为 Emoji
【发布时间】:2020-07-09 15:16:35
【问题描述】:

我在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}`))

我做错了什么?

【问题讨论】:

    标签: javascript node.js unicode emoji


    【解决方案1】:

    一种选择可能是将所有 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,意思是:

    1. \{ - 匹配一个开放的花括号。
    2. ([^}]*) - 匹配并分组左大括号后面的内容,这不是一个右大括号}
    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);

    【讨论】:

    • 非常感谢@nick-parsons。这对我帮助很大。
    • 这在 SMS 中以某种方式显示为中文符号,但在 JS 控制台中看起来是正确的。有什么建议可以解决这个问题吗?
    • @Shambhavi 嗯,不太确定。我猜这取决于你如何发送短信
    • @Shambhavi 当然,我在回答中提供了解释(见编辑)
    猜你喜欢
    • 2021-08-16
    • 2018-05-09
    • 2021-01-28
    • 1970-01-01
    • 2021-11-16
    • 1970-01-01
    • 1970-01-01
    • 2011-05-29
    • 2018-09-18
    相关资源
    最近更新 更多