【问题标题】:\u in JavaScript String.raw`template literal`\u 在 JavaScript String.raw`模板文字`
【发布时间】: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


【解决方案1】:

您可以利用\u 语法,将行替换为\u005Cusepackage{indentfirst},甚至只是\x5Cusepackage{indentfirst}

5C对应\

另一种选择可能是对表达式使用美元符号和花括号表示法。 ${'\\'}usepackage{indentfirst}

【讨论】:

    猜你喜欢
    • 2019-12-13
    • 2021-05-05
    • 1970-01-01
    • 1970-01-01
    • 2015-11-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多