0

(已编辑)我正在读取一个 JSON 文件,其中包含一些编码如下的 UTF-8 字符:“ \uf36b”。我正在尝试编写一个正则表达式来将其转换为一个看起来像“ 🍫”的 HTML 实体。这会在我的 html 页面中正确显示字符。

我无法正确显示应与“\uf36b”关联的字符,尤其是在包含其他文本的较长句子中。

如何编写一个正则表达式来替换“\uf4d6”和“\uf36b”之类的字符串,但不保留其他文本?

例子:

var str = "I need \uf36b #chocolate";

这应该转换为:

I need 🍫 #chocolate; 
4

1 回答 1

2

\uf36b是一个表示字符的 Unicode 代码点,应该可以让您的页面支持这样的字符,而无需通过编码为 UTF-8 来转义它们。

话虽如此,可打印的 ASCII 范围是从\u0020(空格字符)到\u007e(波浪号),因此您应该能够使用类似以下的内容来仅转义您需要的字符:

var escaped = "I need \uf36b #chocolate".replace(/[^\x20-\x7e]+|%/g, escape);

这将escape()仅调用字符串中的非 ASCII 或不可打印的 ASCII 字符以及任何%字符。

然后您可以使用它var str = escaped.replace(/%(..)/g,"&#x1f") + ";";来进行转换,尽管这看起来很奇怪,而且我真的看不出它会如何做任何有用的事情。您可能实际上想要以下内容:

var str = escaped.replace(/%(?:u([0-9a-f]{4})|([0-9a-f]{2}))/gi, "&#x$1$2;");
于 2013-10-22T16:48:54.127 回答