如何在javascript中“重新启用”特殊字符序列?

时间:2014-06-18 20:13:12

标签: javascript string

如果我有一个已定义的String变量(例如):

 var testString="not\\n new line";

它的价值当然是not\n new line

但如果直接使用"not\n new line",测试字符串将包含新行。

那么将 testString 转换为包含新行的字符串以及使用双反斜杠“禁用”的所有其他特殊字符序列的最简单方法是什么? 使用替换?如果它用于unicode字符序列,它看起来会花费很多时间。

2 个答案:

答案 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新行" (引用和所有)。