首页 > 解决方案 > 在 JavaScript 中解析 A​​scii 转义字符串

问题描述

假设我们得到一个本身包含 ASCII 转义字符的字符串,例如"\x64"(请注意,这是字符串的内容,而不是代码中的内容)。JavaScript中是否有一种简单的方法可以将其解析为实际字符?

有一个使用的老技巧,JSON.parse但它似乎只适用于 unicode 转义序列并且无法识别 ASCII 的,如:

JSON.parse(`"\\u0064"`); // Output: "d" (as expected)
JSON.parse(`"\\x64"`);   // ERROR: Unexpected token x

是否有适用于 ASCII 转义序列的等价物?我知道 usingeval()有效,但我真的不想使用eval.

编辑:为了澄清,原始字符串中的某些字符可能不会被转义;例如,我们可能需要解析"Hello Worl\x64"

标签: javascriptascii

解决方案


一种解决方案是替换\x**字符串中的所有模式,使用回调将它们解析为基数 16 整数并将结果传递给以String.fromCharCode转换为字符:

const str = "\\x48\\x65ll\\x6f\\x20W\\x6f\\x72\\x6c\\x64";
const res = str.replace(/\\x(..)|./g, (m, p1) => p1 ? String.fromCharCode(parseInt(p1, 16)) : m);
console.log(res);

如果您不介意覆盖原始字符串,可以将其稍微简化为:

let str = "\\x48\\x65ll\\x6f\\x20W\\x6f\\x72\\x6c\\x64";
str = str.replace(/\\x(..)/g, (m, p1) => String.fromCharCode(parseInt(p1, 16)));
console.log(str);


推荐阅读