在Javascript

时间:2017-12-30 04:11:00

标签: javascript node.js

请考虑以下代码段:

var a = '\\555';
var b = '\555';
console.log(a, b); // outputs \555 -5

所以a的值有一个转义反斜杠,b已经转义55,这是"减去"的Unicode代码点的八进制等价物。或"破折号"并且结尾5会与-连接,从而产生-5

现在我想要最好的方式来评估/解码" a的值,使其等于b的值。任何帮助将不胜感激。

2 个答案:

答案 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