javascript - 在 JavaScript 中解析 Ascii 转义字符串
问题描述
假设我们得到一个本身包含 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"
。
解决方案
一种解决方案是替换\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);
推荐阅读
- java - 使用 junit 和 mockito 测试 jpql 查询
- python - 在图表上绘制多维数据
- android - 音频文件上传到android中的实时服务器
- xaml - Xamarin.Forms 无法在列表中显示图像
- mysql - Mysql for Excel - BUG - 显示错误的参数
- python - Python Selenium - 使用在另一个文件中启动的相同驱动程序实例
- html - 我想显示 HTML 页面而不是显示图像。但是代码试图错误地打开图像
- statistics - 线性回归中的归一化 - 全部与仅 1 个变量
- react-native - ScrollView 中的有界高度是多少?
- python - 崇高文本python错误