Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/473.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/39.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Javascript中计算转义字符串文本_Javascript_Node.js - Fatal编程技术网

在Javascript中计算转义字符串文本

在Javascript中计算转义字符串文本,javascript,node.js,Javascript,Node.js,考虑以下代码段: var a = '\\555'; var b = '\555'; console.log(a, b); // outputs \555 -5 因此,a的值有一个转义的反斜杠,b有一个转义的55,它是“减号”或“破折号”的Unicode码点的八进制等价物,尾随的5被连接到-,从而产生-5 现在我想知道“评估/解码”a值的最佳方法,即它等于b的值。任何帮助都将不胜感激。除了正则表达式,还有其他方法,但没有一种是理想的: var a1 = '\\555'; // unsafe: o

考虑以下代码段:

var a = '\\555';
var b = '\555';
console.log(a, b); // outputs \555 -5
因此,
a
的值有一个转义的反斜杠,
b
有一个转义的55,它是“减号”或“破折号”的Unicode码点的八进制等价物,尾随的
5
被连接到
-
,从而产生
-5


现在我想知道“评估/解码”
a
值的最佳方法,即它等于
b
的值。任何帮助都将不胜感激。

除了正则表达式,还有其他方法,但没有一种是理想的:

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

除了正则表达式,还有其他方法,但没有一种是理想的:

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

eval
可以执行此操作(假设它是有效字符串,不包含其他转义符和引号):

但实际上,显式解码函数是一个更好的主意:

function decodeOctEscapes(x) {
    return x.replace(/\\([0-7]{2})/g, (_, v) => String.fromCharCode(parseInt(v, 8)));
}

eval
可以执行此操作(假设它是有效字符串,不包含其他转义符和引号):

但实际上,显式解码函数是一个更好的主意:

function decodeOctEscapes(x) {
    return x.replace(/\\([0-7]{2})/g, (_, v) => String.fromCharCode(parseInt(v, 8)));
}

你会用正则表达式吗?我不太明白你的问题
a
b
是两个不同的值,你想做什么?@Khang如果问题不清楚,很抱歉。我所要做的就是对
a
的值进行“解码”,使
decode(a)==b
变为
true
。希望现在天气晴朗。@Greggz是的,我能。但是,按照Javascript规范解析字符串将非常费力。不过,您建议什么解决方案?您是否也需要能够替换诸如“\\n”之类的内容,或者只是(不推荐)八进制转义?您可以使用正则表达式吗?我不太理解您的问题
a
b
是两个不同的值,你想做什么?@Khang如果问题不清楚,很抱歉。我所要做的就是对
a
的值进行“解码”,使
decode(a)==b
变为
true
。希望现在天气晴朗。@Greggz是的,我能。但是,按照Javascript规范解析字符串将非常费力。不过,您建议什么解决方案?您是否也需要能够替换诸如“\\n”之类的内容,还是仅仅(不推荐)八进制转义?