在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”之类的内容,还是仅仅(不推荐)八进制转义?