【发布时间】:2017-01-11 15:35:01
【问题描述】:
如何避免\u 被解释为字符转义序列?
在我的 JavaScript 项目中,我需要一些开始的 LaTeX 命令的字符串文字。在我将每个反斜杠都转义之前 (\\),但我最近在 JavaScript 中发现了原始字符串。如果我的源代码中有 exact 字符串文字,那就太好了。不幸的是,\usepackage{indentfirst} 现在有一个问题。 \u 被解释为字符转义序列,这当然不是我想要的。有没有办法避免这种行为,或者这根本不是String.raw 的地方?
缩略代码:
var title="title", author="author";
console.log(String.raw`
\documentclass{book}
\title{${title}}
\author{${author}}
\date{}
\usepackage{indentfirst}
\begin{document}
\maketitle{}
\tableofcontents{}
`);
我通过用`+"\\usepackage{indentfirst}"+String.raw` 替换有问题的行来实现这一点,但这当然不是很清楚。
【问题讨论】:
-
嗯,
String.raw预计会返回"\\u…"。你得到一个错误,或者只是错误的结果?你使用什么 ES6 实现? -
@Bergi - 有同样的建议,但看起来新的 es6 unicode 转义让你可以执行
console.log('\u{2622}')之类的操作会在 es6 模板中抛出 Unexpected token 错误字符串。所以只有\u有问题,\n或\r等没有问题。 -
@DavidDomain 将其用作字符串可能会抛出,但使用带有
String.raw标记的则不应该。 -
@Bergi 刚试了下,
console.log(String.raw`Not a newline: \n`)有效,console.log(String.raw`Unicode escape: \u`)无效。 -
@DavidDomain 在哪个浏览器中?我希望这是一个错误 - 如果不是,它可能应该在规范中修复。
标签: javascript escaping rawstring template-strings