Литералы шаблонов (многострочная строка) с вложенными обратными окнами (`) в ES6

Как написать литерал шаблона (многострочную строку) в ES6, который будет содержать обратные элементы (`) и сам по себе (например, вложенные обратные выходы).

например:

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

Причина, в которой я нуждаюсь:

Это очевидно в моем примере кода выше.

Я пытаюсь создать node-mysql запросы как Strings и хранить их в переменной для передачи их на mySQL. Синтаксис запроса mySQL требует backticks для UPDATE -тильных запросов.

  • Единственный способ, с помощью которого они могут выглядеть аккуратно и аккуратно, - это использовать литералы шаблонов, иначе запросы, использующие обычные однострочные строки, выглядят немного ужасно, потому что они в конечном итоге очень и очень длинные - это некоторые случаи.

  • Я также не хочу завершать строки, используя \n, поскольку он громоздкий.

Ответ 1

От ES6 In Depth: Шаблонные строки Джейсона Орендорфа:

Если вам нужно написать обратную линию внутри строки шаблона, вы должны избежать ее с обратной косой чертой: `\`` совпадает с "`".

Ваш запрос должен быть:

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

Ответ 2

Используйте\`, это работает для меня в последнем Chrome.

Ответ 3

Если вы хотите использовать апостроф в строке, созданной с помощью апострофов, вы можете избежать ее с помощью обратной косой черты:

'\''

Аналогично, если вы хотите использовать обратную линию в литерале шаблона, вам необходимо выполнить его с помощью обратного слэша:

`\``

Ответ 4

См. 11.8.6 Литературные лексические компоненты шаблона

Шаблон без подстановок определяется как

NoSubstitutionTemplate ::
    ` TemplateCharactersopt`

где символ шаблона

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

Следовательно, ` не может быть символом шаблона, если вы не избежите его, указав его \.

Ответ 5

Лично я считаю, что литералы шаблонов ES6 неадекватны для SQL (и уценки), главным образом потому, что вы не можете использовать символы обратного хода. Я бы хотел, чтобы они добавили строки с тремя кавычками, чтобы исправить это правильно.

Тем временем, поскольку вы, вероятно, используете transpiler для ES6, вы можете использовать triplet (отказ от ответственности: я автор).

Ответ 6

ES6 имеет новые функции

Литералы шаблонов

и

Отмеченные шаблонные литералы (тегированные шаблоны)

которые облегчают работу со строками. Вы завершаете текст в `backticks`

С этим мы можем:

1.Interpolate variables

let foo = "abc";

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

2.Интерполируйте любое выражение

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

3.Согласовать строки с кавычками "и" и без     избегайте чего-либо.

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

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

Синтаксис 4.Cleaner для многострочной строки

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.

Надеюсь, это поможет!!!!!!