如果我有一个已定义的String变量(例如):
var testString="not\\n new line";
它的价值当然是not\n new line
。
但如果直接使用"not\n new line"
,测试字符串将包含新行。
那么将 testString 转换为包含新行的字符串以及使用双反斜杠“禁用”的所有其他特殊字符序列的最简单方法是什么? 使用替换?如果它用于unicode字符序列,它看起来会花费很多时间。
答案 0 :(得分:2)
JSON.parse('"' + testString + '"')
将解析JSON并解释JSON转义序列,它涵盖除\x
十六进制,\v
和非标准八进制转义序列之外的所有JS转义序列。
人们会告诉你eval
它。别。 eval
因此非常强大,而且额外的权力伴随着XSS漏洞的风险。
var jsEscapes = {
'n': '\n',
'r': '\r',
't': '\t',
'f': '\f',
'v': '\v',
'b': '\b'
};
function decodeJsEscape(_, hex0, hex1, octal, other) {
var hex = hex0 || hex1;
if (hex) { return String.fromCharCode(parseInt(hex, 16)); }
if (octal) { return String.fromCharCode(parseInt(octal, 8)); }
return jsEscapes[other] || other;
}
function decodeJsString(s) {
return s.replace(
// Matches an escape sequence with UTF-16 in group 1, single byte hex in group 2,
// octal in group 3, and arbitrary other single-character escapes in group 4.
/\\(?:u([0-9A-Fa-f]{4})|x([0-9A-Fa-f]{2})|([0-3][0-7]{0,2}|[4-7][0-7]?)|(.))/g,
decodeJsEscape);
}
答案 1 :(得分:2)
如果你想表达一个字符串以便Javascript可以解释它(相当于Python的repr
函数),请使用JSON.stringify
:
var testString="not\n new line";
console.log(JSON.stringify(testString))
将导致"而不是\ n新行" (引用和所有)。