javascript - template - Literales de plantilla con backticks anidados(`) en ES6
template string javascript html (7)
Desde ES6 en profundidad: cuerdas de plantilla de Jason Orendorff :
Si necesita escribir un backtick dentro de una cadena de plantilla, debe escapar con una barra invertida:
`/``
es lo mismo que"`"
.
Su consulta debe ser:
var query = `UPDATE packet
SET
/`association/` = "3485435",
/`tagname/` = "Simos"`
¿Cómo puedo escribir un literal de plantilla en ES6 que contenga backticks (`) en y por sí mismo, (es decir, backticks anidados)?
P.ej:
var query = `
UPDATE packet
SET
`association` = "3485435",
`tagname` = "associated"
`
Razón por la que lo necesito:
Es bastante obvio en mi ejemplo de código anterior.
Estoy tratando de construir consultas de node-mysql como Strings
y almacenarlas en una variable para pasarlas a mySQL. La sintaxis de consulta de mySQL requiere marcas de retroceso para las consultas de estilo UPDATE
.
La única forma en que puedo hacer que se vean pulcros y ordenados es mediante el uso de plantillas literales, de lo contrario, las consultas que usan cadenas de una sola línea se ven horribles porque terminan siendo muy largas en algunos casos.
También quiero evitar terminar las líneas usando
/n
ya que es engorroso.
ES6 tiene nuevas características
Literales de plantilla
y
Plantillas etiquetadas literales (Plantillas etiquetadas)
lo que facilita el trabajo con cuerdas. Envuelves tu texto en `backticks`
Con esto podemos:
1.Interpolar variables
let foo = "abc";
console.log(`Welcome ${foo}`); // Welcome abc
2. Interpolar cualquier tipo de expresión.
console.log(`2+3 = ${2+3}`) // 2+3 = 5
3.Declare cadenas con comillas "y" sin tener que escapar de nada.
let foo = `foo is ''bar'', "bar" is foo`
console.log(foo); // "foo is ''bar'', "bar" is foo"
4. Sintaxis de limpieza para cadenas multilínea
let text = `foo is bar
bar is foo`
console.log(text);
//"foo is bar
//bar is foo"
5. Plantillas etiquetadas, podemos pasar literales de plantilla a una función, aquí es cómo:
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, podemos obtener la forma en bruto, aquí está el ejemplo:
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.
¡¡¡¡¡¡Espero que esto ayude!!!!!!
Personalmente, considero que los literales de la plantilla de ES6 son inadecuados para SQL (y markdown) principalmente porque no se pueden usar caracteres de comilla invertida. Me gustaría que agregaran cadenas de comillas triples para solucionar esto correctamente.
Mientras tanto, dado que probablemente esté usando un transpiler para ES6 de todos modos, podría considerar usar un triplet (descargo de responsabilidad: yo soy el autor).
Si quieres usar un apóstrofe en una cuerda hecha con apóstrofes, escapa de él con una barra invertida, así:
''/'''
De manera similar, si desea usar un backtick en un literal de plantilla, debe pegarlo con una barra invertida:
`/``
Use / `, parece funcionar para mí en el último Chrome.
Ver 11.8.6 Componentes Léxicos de Plantillas
Una plantilla sin sustituciones se define como
NoSubstitutionTemplate ::
` TemplateCharactersopt `
donde un personaje de plantilla es
TemplateCharacter ::
$ [lookahead ≠ { ]
/ EscapeSequence
LineContinuation
LineTerminatorSequence
SourceCharacter but not one of ` or / or $ or LineTerminator
Por lo tanto, `
no puede ser un carácter de plantilla a menos que se escape de él precediéndolo con /
.
Como se mencionó en otras respuestas, puede escapar de la marca de retroceso `
con una barra invertida, como /`
var tripleBacktickExample = `
/`/`/`python
# This JavaScript string contains some example Markdown that
# uses triple-backticks to delimit a Python code block.
/`/`/`
`
Sin embargo, si necesita muchos backticks en una fila `````
dentro del literal de la plantilla, podría ser más legible colocarlos dentro de una cadena normal que está dentro de un marcador de posición, como ${''`````''}
o ${"`````"}
.
var tripleBacktickExample = `
${''```''}python
# This JavaScript string contains some example Markdown that
# uses triple-backticks to delimit a Python code block.
${''```''}
`