web-dev-qa-db-fra.com

Comment créer une chaîne multiligne dans node.js?

Avec la montée en puissance de node.js, les chaînes multilignes deviennent de plus en plus nécessaires en JavaScript.

  1. Existe-t-il un moyen spécial de faire cela dans Node.JS, même si cela ne fonctionne pas dans les navigateurs?
  2. Existe-t-il des plans ou au moins une demande de fonctionnalité pour ce faire que je puisse prendre en charge?

Je sais déjà que vous pouvez utiliser \n\ à la fin de chaque ligne, ce n’est pas ce que je veux.

111
Bryan Field

noeud v4 et versions actuelles du noeud

A partir de ES6 (et donc des versions de Node supérieures à v4), un nouveau type intrinsèque "template literal" a été ajouté à Javascript (indiqué par des points arrière "` ") qui peut également être utilisé. pour construire des chaînes multilignes, comme dans:

`this is a 
single string`

qui évalue à: 'this is a\nsingle string'.

Notez que la nouvelle ligne à la fin de la première ligne est incluse dans la chaîne résultante.

Des littéraux de modèles ont été ajoutés pour permettre aux programmeurs de construire des chaînes dans lesquelles des valeurs ou du code peuvent être directement injectés dans un littéral de chaîne sans devoir utiliser util.format ou d’autres templaters, comme dans:

let num=10;

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

qui affichera "le résultat de 10 plus 10 est 20." à la console.

Anciennes versions du noeud

L'ancienne version du noeud peut utiliser un caractère "continuation de ligne" vous permettant d'écrire des chaînes multilignes telles que:

'this is a \
single string'

qui évalue à: 'this is a single string'.

Notez que la nouvelle ligne à la fin de la première ligne est non incluse dans la chaîne résultante.

135
Rob Raisch

Les chaînes multilignes sont une partie courante de JavaScript (depuis ES6) et sont prises en charge dans node.js v4.0.0 et plus récent.

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

console.log(text);
44
Vijey

Que cherchez-vous exactement quand vous voulez parler de chaînes multilignes.

Cherchez-vous quelque chose comme:

var str = "Some \
    String \
    Here";

Lequel serait imprimé comme "Some String Here"?

Si c'est le cas, n'oubliez pas que ce qui précède est valide Javascript, mais ce n'est pas:

var str = "Some \ 
    String \
    Here";

Quelle est la différence? Un espace après le \. Amusez-vous à déboguer cela.

39
Robert

Jetez un coup d'œil au module mstring pour node.js.

C'est un petit module simple qui vous permet d'avoir des chaînes multilignes en JavaScript.

Faites juste ceci:

var M = require('mstring')

var mystring = M(function(){/***OntarioMining andForestryGroup***/})

obtenir

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

Et c'est à peu près tout.

Comment ça marche
Dans Node.js, vous pouvez appeler le .toString méthode d’une fonction, et elle vous donnera le code source de la définition de la fonction, y compris les commentaires. Une expression régulière saisit le contenu du commentaire.

Oui, c'est un bidouillage. Inspiré par un commentaire jetable de Dominic Tarr .


remarque: le module (à compter du 2012/13/11) n'autorise pas les espaces blancs avant la fermeture ***/, vous devrez donc le pirater vous-même.

8
David Murdoch

En plus de ce que les gens ont écrit ici, j'ai entendu dire que la concaténation peut être beaucoup plus rapide que de se joindre à vms javascript moderne. Sens:

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

Sera plus lent que:

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

Dans certains cas. http://jsperf.com/string-concat-versus-array-join/

En outre, je trouve l’une des caractéristiques les plus attrayantes de Coffeescript . Oui, oui, je sais, les haïsseurs vont détester.

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

C'est particulièrement agréable pour les extraits HTML. Je ne dis pas que c'est une raison pour l'utiliser, mais je souhaite qu'il atterrisse en pays ecma :-(.

Josh

6
Josh

Jetez un coup d'œil à CoffeeScript: http://coffeescript.org

Il supporte les chaînes multi-lignes, l'interpolation, la compréhension des tableaux et beaucoup d'autres choses sympas.

4
Ricardo Tomasi

Si vous utilisez io.js, il prend en charge les chaînes multilignes telles qu’elles sont dans ECMAScript 6.

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

Voir "Nouvelles méthodes de chaîne" sur http://davidwalsh.name/es6-io pour plus de détails et "modèle de chaîne" sur http://kangax.github.io/compat-table/es6 / pour la compatibilité de suivi.

1
Simon D

Vanilla Javascipt ne prend pas en charge les chaînes multilignes. Les pré-processeurs de langues s'avèrent être réalisables de nos jours.

CoffeeScript, le plus populaire d'entre eux, possède cette fonctionnalité, mais ce n'est pas minimal, c'est un nouveau langage. Le compilateur traceur de Google ajoute de nouvelles fonctionnalités à la langue en tant que sur-ensemble, mais je ne pense pas que les chaînes multilignes constituent l'une des fonctionnalités ajoutées.

Je cherche à créer un sur-ensemble minimal de javascript prenant en charge les chaînes multilignes et quelques autres fonctionnalités. J'ai commencé ce petit langage il y a quelque temps avant d'écrire le compilateur initial pour coffeescript. Je prévois de le finir cet été.

Si les pré-compilateurs ne sont pas une option, il y a aussi la balise de script hack dans laquelle vous stockez vos données multilignes dans une balise de script au format HTML, mais en lui donnant un type personnalisé afin qu'elle ne soit pas évaluée. Ensuite, en utilisant javascript, vous pourrez extraire le contenu de la balise de script.

De plus, si vous mettez un\à la fin d'une ligne du code source, la nouvelle ligne sera ignorée comme si elle n'était pas là. Si vous voulez la nouvelle ligne, vous devez terminer la ligne avec "\ n \".

0
Tim Caswell

En plus de la réponse acceptée:

`this is a 
single string`

qui évalue à: 'ceci est une\n chaîne unique'.

Si vous voulez utiliser l'interpolation de chaîne mais sans nouvelle ligne, ajoutez simplement une barre oblique inverse comme dans la chaîne normale:

`this is a \
single string`

=> 'ceci est une chaîne unique'.

Gardez à l'esprit que des espaces manuels sont nécessaires:

`this is a\
single string`

=> 'c'est une seule chaîne'

0
jsnceo