正确的正则表达式来查找和替换转义的 UTF-8 字符串

Proper Regex to find and replace escaped UTF-8 strings

本文关键字:替换 转义 UTF-8 字符串 查找 正则表达式      更新时间:2023-09-26

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

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

如何编写一个正则表达式来替换"''uf4d6"和"''uf36b"等字符串,但保留其他文本?

例:

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

这应该转换为:

I need 🍫 #chocolate; 

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

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

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

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

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

var str = escaped.replace(/%(?:u([0-9a-f]{4})|([0-9a-f]{2}))/gi, "&#x$1$2;");