如果输出完全正常(可预测),.replace()
可能是最简单的。
var escapeSequences = xx.responseText.replace(/^\{a:/, '').replace(/\}$/, '');
console.log(escapeSequences === "\"\\x48\\x65\\x6C\\x6C\\x6F\""); // true
或者,如果一个值相等但可能不相同的字符串文字就足够了,您可以解析(见下文),然后解析stringify()
一个单独的属性。
console.log(JSON.stringify(data.a) === "\"Hello\""); // true
否则,您可能需要responseText
通过词法分析器对其进行标记并从中检索文字。JavaScript 不包含与解析/评估分开的选项,因此您需要为此找到一个库。
“用 JavaScript 编写的 Lexer? ” 可能是一个很好的起点。
解析它:
由于它似乎是一串代码,因此您可能必须使用eval()
.
var data = eval('(' + xx.responseText + ')');
console.log(data.a); // Hello
注意:括号确保{...}
被评估为Object
文字而不是块。
另外,我建议寻找替代代码来传递这样的数据。
一个常见的选项是JSON
,它的语法来自 JavaScript,但使用了一个相当严格的子集。它不允许function
包含 s 或其他可能有问题的代码。
var data = JSON.parse(xx.responseText);
console.log(data.a); // Hello
访问JSON.org,您应该能够找到用于选择服务器端语言以输出 JSON 的参考或库。
{ "a": "Hello" }