Cómo hago una cadena de varias líneas en el nodo.js?


Con el surgimiento del nodo.js, las cadenas multilínea son cada vez más necesarias en JavaScript.

  1. Hay una forma especial de hacer esto en Node.JS, incluso si no funciona en los navegadores?
  2. ¿Hay algún plan o al menos una solicitud de característica para hacer esto que pueda soportar?

Ya sé que puedes usar \n\ al final de cada línea, eso no es lo que quiero.

Author: mikemaccana, 2011-06-03

8 answers

Node v4 y versiones actuales de node

A partir de ES6 (y, por lo tanto, versiones de Nodo mayores que v4), se agregó un nuevo tipo intrínseco "plantilla literal" a Javascript (denotado por back-ticks "`") que también se puede usar para construir cadenas multilíneas, como en:

`this is a 
single string`

Que evalúa a: 'this is a\nsingle string'.

Tenga en cuenta que la nueva línea al final de la primera línea está incluida en la cadena resultante.

Se agregaron literales de plantilla para permitir a los programadores construir cadenas donde los valores o el código se pueden inyectar directamente en un literal de cadena sin tener que usar util.format u otros templaters, como en:

let num=10;

console.log(`the result of ${num} plus ${num} is ${num + num}.`);

Que imprimirá " el resultado de 10 más 10 es 20."a la consola.

Versiones anteriores de node

La versión anterior de node puede usar un carácter de "continuación de línea" que le permite escribir cadenas multilíneas como:

'this is a \
single string'

Que evalúa a: 'this is a single string'.

Tenga en cuenta que la nueva línea al final de la primera la línea es no incluida en la cadena resultante.

 99
Author: Rob Raisch,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-05-31 02:01:28

Las cadenas multilínea son una parte actual de JavaScript (desde ES6) y son compatibles con node.js v4. 0.0 y posteriores.

var text = `Lorem ipsum dolor 
sit amet, consectetur 
adipisicing 
elit.  `;

console.log(text);
 39
Author: Vijey,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-05-27 21:54:07

Qué es exactamente lo que está buscando cuando se refiere a cadenas multilínea.

Estás buscando algo como:

var str = "Some \
    String \
    Here";

¿Qué se imprimiría como "Alguna cadena aquí"?

Si es así, tenga en cuenta que lo anterior es Javascript válido, pero esto no lo es:

var str = "Some \ 
    String \
    Here";

¿Cuál es la diferencia? Un espacio después de \. Diviértete depurando eso.

 38
Author: Robert,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2011-06-02 21:40:11

Echa un vistazo al módulo mstring para nodo.js.

Este es un pequeño módulo simple que le permite tener cadenas multilíneas en JavaScript.

Solo haz esto:

var M = require('mstring')

var mystring = M(function(){/*** Ontario Mining and Forestry Group ***/})

Para obtener

mystring === "Ontario\nMining and\nForestry\nGroup"

Y eso es más o menos todo.

Cómo Funciona
En Nodo.js, puede llamar al método .toString de una función, y le dará el código fuente de la definición de la función, incluyendo cualquier comentario. Una expresión regular agarra el contenido del comentario.

Sí, es un truco. Inspirado por un comentario desechable de Dominic Tarr .


nota: El módulo (a partir de 2012/13/11) no permite espacios en blanco antes del cierre ***/, por lo que tendrá que hackearlo usted mismo.

 8
Author: David Murdoch,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2012-11-14 01:38:38

Como un aparte de lo que la gente ha estado publicando aquí, he oído que la concatenación puede ser mucho más rápida que unirse en máquinas virtuales javascript modernas. Significado:

var a = 
[ "hey man, this is on a line",
  "and this is on another",
  "and this is on a third"
].join('\n');

Será más lento que:

var a = "hey man, this is on a line\n" + 
        "and this is on another\n" +
        "and this is on a third";    

En ciertos casos. http://jsperf.com/string-concat-versus-array-join/3

Como otro aparte, encuentro esta una de las características más atractivas en Coffeescript. Sí, sí, lo sé, los que odian van a odiar.

html = '''
       <strong>
         cup of coffeescript
       </strong>
       '''

Es especialmente bueno para fragmentos html. No lo soy. decir es una razón para usarlo, pero me gustaría que aterrizara en la tierra de ecma: - (.

Josh

 5
Author: Josh,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2011-06-03 01:19:17

Echa un vistazo a CoffeeScript: http://coffeescript.org

Es compatible con cadenas de varias líneas, interpolación, comprensiones de matrices y muchas otras cosas agradables.

 4
Author: Ricardo Tomasi,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2011-06-04 10:10:35

Si usa io.js, tiene soporte para cadenas multilínea como están en ECMAScript 6.

var a =
`this is
a multi-line
string`;

Ver" Nuevos métodos de cadena "en http://davidwalsh.name/es6-io para detalles y" cadenas de plantilla " en http://kangax.github.io/compat-table/es6 / para compatibilidad de seguimiento.

 1
Author: Simon D,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-08-03 14:36:29

Vanilla Javascipt no admite cadenas de varias líneas. Los pre-procesadores de lenguaje están resultando ser factibles en estos días.

CoffeeScript, el más popular de estos tiene esta característica, pero no es mínimo, es un nuevo lenguaje. El compilador traceur de Google agrega nuevas características al lenguaje como un superconjunto, pero no creo que las cadenas multilínea sean una de las características agregadas.

Estoy buscando hacer un superconjunto mínimo de javascript que soporte cadenas multilínea y un par otras características. Comencé este pequeño lenguaje hace un tiempo antes de escribir el compilador inicial para coffeescript. Planeo terminarlo este verano.

Si los precompiladores no son una opción, también está el truco de la etiqueta de script donde almacena sus datos multilínea en una etiqueta de script en el html, pero le da un tipo personalizado para que no se evalúe. Luego, usando javascript, puede extraer el contenido de la etiqueta de script.

También, si pones una \ al final de cualquier línea en la fuente código, hará que la nueva línea sea ignorada como si no estuviera allí. Si quieres la nueva línea, entonces tienes que terminar la línea con " \n\".

 0
Author: Tim Caswell,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2011-06-03 23:03:19