ES6中带有嵌套反引号(`)的模板文字

Nik*_*des 32 javascript ecmascript-6

如何在ES6中编写一个模板文字,其中包含反引号(`)及其自身(即嵌套反引号).

例如:

var query = `
  UPDATE packet
  SET
  `association` = "3485435",
  `tagname` = "associated"
 `
Run Code Online (Sandbox Code Playgroud)

我需要它的原因:

在我上面的代码示例中很明显.

我正在尝试构建node-mysql查询Strings,并将它们存储在一个变量中,以便将它们传递给mySQL.mySQL查询语法要求返回UPDATE样式查询.

  • 我可以让它们看起来整洁的唯一方法是使用模板文字,否则使用常规单行字符串的查询看起来很糟糕,因为在某些情况下它们最终会很长.

  • 我也想避免使用终止行,\n因为它很麻烦.

tt9*_*tt9 35

来自ES6 In Depth:Jason Orendorff的模板字符串:

如果你需要在模板字符串中写一个反引号,你必须使用反斜杠来转义它:与它`\``相同"`".

您的查询应该是:

var query = `UPDATE packet
  SET
  \`association\` = "3485435",
  \`tagname\` = "Simos"`
Run Code Online (Sandbox Code Playgroud)


Mic*_*ski 11

如果要在由撇号组成的字符串中使用撇号,可以使用反斜杠对其进行转义,如下所示:

'\''
Run Code Online (Sandbox Code Playgroud)

同样,如果您想在模板文字中使用反引号,则必须使用反斜杠对其进行转义:

`\``
Run Code Online (Sandbox Code Playgroud)


Ori*_*iol 6

请参见11.8.6模板文字词汇组件

没有替换的模板定义为

NoSubstitutionTemplate ::
    ` TemplateCharactersopt `
Run Code Online (Sandbox Code Playgroud)

模板字符所在的位置

TemplateCharacter ::
    $ [lookahead ? { ]
    \ EscapeSequence
    LineContinuation
    LineTerminatorSequence
    SourceCharacter but not one of ` or \ or $ or LineTerminator
Run Code Online (Sandbox Code Playgroud)

因此,`不能是模板字符,除非您通过前面的方式将其转义\.


Ror*_*ane 5

正如其他答案中所述,您可以`使用反斜杠转义反引号,例如\`.

var tripleBacktickExample = `
\`\`\`python
# This JavaScript string contains some example Markdown that
# uses triple-backticks to delimit a Python code block.
\`\`\`
`
Run Code Online (Sandbox Code Playgroud)

但是,如果您需要`````在模板文字中连续使用非常多的反引号,将它们放在占位符内的普通字符串中可能更具可读性,例如${'`````'}${"`````"}

var tripleBacktickExample = `
${'```'}python
# This JavaScript string contains some example Markdown that
# uses triple-backticks to delimit a Python code block.
${'```'}
`
Run Code Online (Sandbox Code Playgroud)

  • @NikKyriakides 在其他答案中只提到了我答案的前半部分。我的答案的后半部分展示了一种新技术。我包括了这两种技术的示例,以便人们可以直接比较它们。 (3认同)

flo*_*ori 5

要转义所有特殊字符,而不仅仅是反引号:

let str = '`Hello`\\n${world}';
let escacped = str.replace(/\\|`|\$/g, '\\$&');
console.log(eval('`' + escaped + '`') === str); // test
Run Code Online (Sandbox Code Playgroud)

我需要这个来生成一些代码。这str是 JavaScript 文件的内容,目标是将这些内容放入另一个生成的 JavaScript 文件中的字符串文字变量中。

遗憾的是,似乎(2019 年)没有用于这种转义的原生 JavaScript 函数。需要替换的字符有:`$\