在ES6中嵌套反引号(`)的模板文字(多行string)

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

例如:

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

我需要它的原因:

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

我试图build立node-mysql查询作为Strings ,并将它们存储在一个variables中,以将它们传递给mySQL。 mySQL查询语法需要反引用UPDATE风格的查询。

  • 我可以让他们看起来整洁的唯一方法是使用模板文字,否则使用常规单行string的查询看起来有点可怕,因为他们最终是非常非常长的一些情况。

  • 我也不想用\n结束行,因为它很麻烦。

从ES6深入:模板string由Jason Orendorff :

如果你需要在模板string中写一个反引号,你必须使用反斜杠来转义它: `\``是一样的。

您的查询应该是:

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

使用\`,它似乎在最新的Chrome中为我工作。

如果你想在一个用撇号string构成的string中使用一个撇号,你可以用一个反斜杠来转义它:

 '\'' 

同样的,如果你想在模板文本中使用反引号,你必须使用反斜线来取反:

 `\`` 

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

没有replace的模板被定义为

 NoSubstitutionTemplate :: ` TemplateCharacters opt ` 

模板angular色在哪里

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

因此, `不能是一个模板字符,除非你通过前面的\转义它。

就我个人而言,我认为ES6模板文字不适用于SQL(和降价),主要是因为您不能使用反引号字符。 我希望他们会添加三重引号string来解决这个问题。

与此同时,由于您可能正在使用ES6的转译器,因此您可以考虑使用三元组 (我声明:我是作者)。

ES6有新function

模板文字

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

这使得使用string更容易。 你用“反引号”包装你的文本

有了这个我们可以:

1.Interpolatevariables

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

2.插入任何一种expression方式

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

3.用“和”引号标注string,而不必转义任何东西。

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

清理多行string的语法

 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,我们可以得到原始的forms,这里是例子:

 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. 

希望这可以帮助!!!!!!