请考虑以下代码段:
var a = '\\555';
var b = '\555';
console.log(a, b); // outputs \555 -5
所以a
的值有一个转义反斜杠,b
已经转义55,这是"减去"的Unicode代码点的八进制等价物。或"破折号"并且结尾5
会与-
连接,从而产生-5
。
现在我想要最好的方式来评估/解码" a
的值,使其等于b
的值。任何帮助将不胜感激。
答案 0 :(得分:2)
eval
可以做到这一点(假设它是一个有效的字符串并且不包含其他转义和没有引号):
var a = '\\555';
console.log(eval('"' + a '"'));
但实际上一个明确的解码函数是一个更好的主意:
function decodeOctEscapes(x) {
return x.replace(/\\([0-7]{2})/g, (_, v) => String.fromCharCode(parseInt(v, 8)));
}
答案 1 :(得分:1)
除了Regex之外还有其他方法,但没有一种方法是理想的:
var a1 = '\\555';
// unsafe: only for trusted values
var a2 = eval('"' + a1 + '"');
var b1 = '\555';
// ES6 raw string; cannot be created on runtime
var b2 = String.raw`\555`;
console.log(a1===b2) // true
console.log(a2===b1) // true