解析 JavaScript 中的 Ascii 转义字符串
Parse Ascii Escaped String in JavaScript
假设我们得到一个本身包含 ASCII 转义字符的字符串,例如 "\x64"
(请注意,这是字符串的内容,而不是代码中的内容)。 JavaScript 中是否有简单的方法将其解析为其实际字符?
有一个使用 JSON.parse
的老把戏,但这似乎只适用于 unicode 转义序列,无法识别 ASCII 序列,如:
JSON.parse(`"\u0064"`); // Output: "d" (as expected)
JSON.parse(`"\x64"`); // ERROR: Unexpected token x
是否有适用于 ASCII 转义序列的等效项?我知道使用 eval()
可以,但我真的不想使用 eval
.
编辑:澄清一下,原始字符串中的某些字符可能无法转义;例如,我们可能需要解析 "Hello Worl\x64"
。
一种解决方案是替换字符串中的所有 \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);
您可以使用 eval 函数来评估一个字符串,就像从 Javascript 源代码中评估它一样,您只需要确保引用它的内容:
eval("\"\x64\"") // will return the javascript string: "d"
假设我们得到一个本身包含 ASCII 转义字符的字符串,例如 "\x64"
(请注意,这是字符串的内容,而不是代码中的内容)。 JavaScript 中是否有简单的方法将其解析为其实际字符?
有一个使用 JSON.parse
的老把戏,但这似乎只适用于 unicode 转义序列,无法识别 ASCII 序列,如:
JSON.parse(`"\u0064"`); // Output: "d" (as expected)
JSON.parse(`"\x64"`); // ERROR: Unexpected token x
是否有适用于 ASCII 转义序列的等效项?我知道使用 eval()
可以,但我真的不想使用 eval
.
编辑:澄清一下,原始字符串中的某些字符可能无法转义;例如,我们可能需要解析 "Hello Worl\x64"
。
一种解决方案是替换字符串中的所有 \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);
您可以使用 eval 函数来评估一个字符串,就像从 Javascript 源代码中评估它一样,您只需要确保引用它的内容:
eval("\"\x64\"") // will return the javascript string: "d"