196 votes

Comment faire une chaîne de caractères de plusieurs lignes dans node.js ?

Avec l'essor de node.js, les chaînes de caractères à plusieurs lignes 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. Y a-t-il des plans ou au moins une demande de fonctionnalité pour faire cela que je puisse soutenir ?

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

1 votes

Pourquoi diable auriez-vous besoin d'insérer des retours en ligne dure ? Rien dans le DOM ne supporte cela (à l'exception de "pre"), et tous les autres types de retour courants ne s'en soucient pas.

0 votes

Ainsi, je ne me retrouve pas avec des onglets à gauche sans retours à droite. J'aime avoir les deux ou aucun. Pour l'instant, j'utilise print( '<div>') pour imprimer mon HTML. Il n'a ni tabulations ni retours, ce qui est "soigné", mais il serait plus facile d'utiliser un script Perl. <<EOF..EOF ou un fichier JSP de style Java. Quoi qu'il en soit, j'ai besoin de pouvoir saisir des variables dans la chaîne multi-lignes lorsqu'elle arrive. Je m'en passerai pour l'instant.

9 votes

@jcolebrand : Node.JS n'est pas principalement concerné par la manipulation du DOM. C'est un environnement de développement d'applications complet. Voir nodejs.org

248voto

Rob Raisch Points 5835

Node v4 et les versions actuelles de node

À partir de ES6 (et donc des versions de Node supérieures à v4), un nouveau type intrinsèque de "template literal" a été ajouté à Javascript (désigné par les barres obliques inversées "`") qui peut également être utilisé pour construire des chaînes de caractères de plusieurs lignes, comme dans le cas suivant :

`this is a 
single string`

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

Notez que le saut de ligne à la fin de la première ligne est inclus dans la chaîne de caractères résultante.

Les littéraux de modèle 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 avoir à utiliser la fonction util.format ou d'autres modèles, comme dans :

let num=10;

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

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

Anciennes versions du nœud

Les anciennes versions de node peuvent utiliser un caractère de "continuation de ligne", ce qui vous permet d'écrire des chaînes de caractères de plusieurs lignes, par exemple :

'this is a \
single string'

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

Notez que le saut de ligne à la fin de la première ligne est no inclus dans la chaîne de caractères résultante.

0 votes

Je pense que je vais finir par utiliser stackoverflow.com/questions/805107/ . Je vais peut-être l'étendre pour pouvoir utiliser des variables. Ce sera certainement créatif ! Mais comme il s'agit de Node.JS, je n'ai pas à me soucier de la compatibilité avec les navigateurs et, dans mon cas, pas même de la compatibilité avec les versions.

6 votes

"Javascript ne supporte pas les chaînes de caractères multi-lignes..." C'est le cas depuis ES5, et c'est dans V8 (le moteur JavaScript de Google), donc vraisemblablement dans NodeJS (qui utilise V8). Voir Continuation de ligne dans [la section 7.8.4]*( es5.github.com/#x7.8.4 ). Le support des outils peut être incomplet pendant un certain temps.

0 votes

Il est dans io.js mais pas encore dans Node.JS - J'ai ajouté une réponse avec quelques liens supplémentaires.

58voto

Vijey Points 769

Les chaînes de caractères multilignes font partie intégrante 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);

3 votes

Cette réponse devrait être votée au sommet immédiatement ! Voir developer.mozilla.org/fr/US/docs/Web/JavaScript/Référence/ pour plus de détails sur les chaînes de modèles.

2 votes

Il est à noter que vous pouvez facilement ajouter des variables en ajoutant la syntaxe ${variablehere} à l'intérieur du modèle (les tics `)

46voto

Robert Points 12091

Que recherchez-vous exactement lorsque vous parlez de chaînes de caractères multilignes.

Vous cherchez quelque chose comme :

var str = "Some \
    String \
    Here";

Lequel s'imprimerait comme "Some String Here" ?

Si c'est le cas, gardez à l'esprit que ce qui précède est du Javascript valide, mais que ceci ne l'est pas :

var str = "Some \ 
    String \
    Here";

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

0 votes

Eh bien, c'est des conneries. Il ne me laisse pas montrer l'espace après le \ sans y mettre un caractère.

1 votes

@jcolebrand : Oui, c'est très amusant n'est-ce pas :P

0 votes

12voto

jsnceo Points 418

En plus de la réponse acceptée :

`this is a 
single string`

qui est évalué à : 'ceci est un \nsingle string'.

Si vous voulez utiliser l'interpolation de chaînes de caractères mais sans nouvelle ligne, il suffit d'ajouter un backslash comme dans une chaîne normale :

`this is a \
single string`

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

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

`this is a\
single string`

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

10voto

Josh Points 8217

En marge de ce que les gens ont posté ici, j'ai entendu dire que la concaténation peut être beaucoup plus rapide que la jointure dans les vms javascript modernes. C'est à dire :

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/3

Par ailleurs, je trouve qu'il s'agit d'une des caractéristiques les plus attrayantes de l'outil de gestion de l'information. Coffeescript . Oui, oui, je sais, les haineux 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 j'aimerais qu'il atterrisse à Ecma Land :-(.

Josh

1 votes

La seule chose qui ne va pas avec CoffeeScript pour moi, est la même chose qui ne va pas avec Groovy la dernière fois que j'ai vérifié. Quand un fichier est converti de .coffee a .js les numéros de ligne sont mélangés. Je n'ai pas essayé CoffeeScript, mais lorsque j'ai essayé Groovy, j'ai trouvé qu'il était assez difficile de déboguer sans obtenir le code généré. .java des fichiers.

0 votes

J'ai écrit des projets assez importants avec du café. Vous finissez par avoir à regarder le code compilé. Il est cependant facile à lire. Je pense qu'il y a encore un stigmate inacceptable avec coffeescript dans la communauté node, bien que plusieurs grands projets soient écrits dedans (zombie.js, pow, riak-js). Je suis actuellement en train de porter certains de mes petits OSS dessus, parce que les gens disent "oh, café, beurk" et passent immédiatement à autre chose, malgré le fait que vous n'avez pas besoin d'utiliser du café pour utiliser la bibliothèque.

0 votes

Je déteste Coffeescript. :P Mais, je suis définitivement un fan du bloc de chaînes ''' ! Ou... La syntaxe PHP heredoc.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X