如何在ES6中编写一个模板文字,其中包含反引号(`)及其自身(即嵌套反引号)。
E.g:
var query = `
UPDATE packet
SET
`association` = "3485435",
`tagname` = "associated"
`
我需要它的原因:
在我上面的代码示例中非常明显。
我尝试将node-mysql个查询构建为Strings
并将它们存储在变量中,以便将它们传递给mySQL。 mySQL查询语法需要UPDATE
- 样式查询的后退。
我能让他们看起来整洁的唯一方式整理是使用模板文字,否则使用常规单行字符串的查询看起来很糟糕,因为在某些情况下它们会很长。
我还想避免使用\n
来终止行,因为它很麻烦。
答案 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函数。 (据我所知)需要替换的字符是:\
,$
和\
。