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

时间:2016-03-04 18:57:45

标签: javascript ecmascript-6

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

E.g:

var query = `
  UPDATE packet
  SET
  `association` = "3485435",
  `tagname` = "associated"
 `

我需要它的原因:

在我上面的代码示例中非常明显。

我尝试将node-mysql个查询构建为Strings并将它们存储在变量中,以便将它们传递给mySQL。 mySQL查询语法需要UPDATE - 样式查询的后退。

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

  • 我还想避免使用\n来终止行,因为它很麻烦。

8 个答案:

答案 0 :(得分:24)

来自ES6 In Depth: Template strings by Jason Orendorff

  

如果您需要在模板字符串中编写反引号,则必须使用反斜杠对其进行转义:`\``"`"相同。

您的查询应该是:

var query = `UPDATE packet
  SET
  \`association\` = "3485435",
  \`tagname\` = "Simos"`

答案 1 :(得分:6)

请参阅11.8.6 Template Literal Lexical Components

没有替换的模板定义为

NoSubstitutionTemplate ::
    ` TemplateCharactersopt `

模板字符为

TemplateCharacter ::
    $ [lookahead ≠ { ]
    \ EscapeSequence
    LineContinuation
    LineTerminatorSequence
    SourceCharacter but not one of ` or \ or $ or LineTerminator

因此,`不能是模板字符,除非您通过在\前面对其进行转义。

答案 2 :(得分:4)

如果你想在用撇号制作的字符串中使用撇号,你可以用反斜杠转义它:

'\''

同样,如果你想在模板文字中使用反引号,你必须用反斜杠来表示它:

`\``

答案 3 :(得分:3)

使用\`,它似乎适用于我最新的Chrome。

答案 4 :(得分:1)

我个人认为ES6模板文字不适合SQL(和降价),主要是因为你不能使用反引号字符。我希望他们能添加三引号字符串来正确修复它。

与此同时,既然你可能正在使用ES6的转换器,你可以考虑使用triplet(免责声明:我是作者)。

答案 5 :(得分:1)

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

var tripleBacktickExample = `
\`\`\`python
# This JavaScript string contains some example Markdown that
# uses triple-backticks to delimit a Python code block.
\`\`\`
`

但是,如果您需要在模板文字内连续添加`````个反引号,那么将它们放在占位符内的普通字符串中可能更具可读性,例如${'`````'}或{ {1}}。

${"`````"}

答案 6 :(得分:0)

ES6具有新功能

  

模板文字

  

标记模板文字(标记模板)

使得使用字符串更容易。您将文本包装在“反引号”

有了这个,我们可以:

1.Interpolate变量

let foo = "abc";

console.log(`Welcome ${foo}`);  // Welcome abc

2.插入任何表达方式

console.log(`2+3 = ${2+3}`) // 2+3 = 5

3.Declare字符串与'和"引号无需       逃避任何事情。

let foo = `foo is 'bar', "bar" is foo`

console.log(foo); // "foo is 'bar', "bar" is foo"

4.多行字符串的清除语法

let text = `foo is bar

bar is foo`  

console.log(text);

//"foo is bar

//bar is foo"

5.Tagged模板,我们可以将模板文字传递给一个函数,方法如下:

let person = 'Mike';
let age = 28;

let output = myTag `that ${ person } is ${ age }`;

function myTag(strings, personExp, ageExp) {

//strings[0] gets value "that "
//strings[1] gets value " is "
//personExp  gets value " Mike "
//ageStr     gets value "28"

return strings[0] + personExp + strings[1] + ageExp;
}

console.log(output);

// that Mike is 28

6.String.raw,我们可以得到原始表单,这是示例:

let text = String.raw `The "\n" newline won't result in a new line.'
console.log(text);
// The "\n" newline won't result in a new line.

希望这有助于!!!!!!

答案 7 :(得分:0)

要动态替换所有特殊字符以用作字符串文字:

str = '`Hello`\\n${world}';
esc = str.replace(/\\|`|\$/g, '\\$&');
console.log(eval('`' + esc + '`') === str);

我需要一些代码生成的东西。 str是JS文件的内容,目标是将该内容放入字符串文字变量中,并放入另一个生成的JS文件中。

遗憾的是,似乎没有(2019)这种原生转义的本地JS函数。 (据我所知)需要替换的字符是:\$\