(已编辑)我正在阅读一个JSON文件,其中包含一些UTF-8字符,其编码如下:“\uf36b
”。我正在尝试编写一个RegExp来将其转换为看起来像“🍫
”的HTML实体。这会在我的html页面中正确显示字符。
我无法正确显示应与“\ uf36b”关联的字符,尤其是在包含其他文字的较长句子中时。
如何编写一个替换字符串的正则表达式,例如“\ uf4d6”和“\ uf36b”,但只留下其他文字?
示例:
var str = "I need \uf36b #chocolate";
这应该转换为:
I need 🍫 #chocolate;
答案 0 :(得分:2)
这里的\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,"") + ";";
进行转换,虽然这看起来很奇怪,但我真的看不出它会如何做太有用的事情。您可能实际上需要以下内容:
var str = escaped.replace(/%(?:u([0-9a-f]{4})|([0-9a-f]{2}))/gi, "&#x$1$2;");