Как мне сделать многострочную строку в node.js? - PullRequest
107 голосов
/ 03 июня 2011

С ростом node.js многострочные строки становятся все более необходимыми в JavaScript.

  1. Есть ли специальный способ сделать это в Node.JS, даже если он не работает в браузерах?
  2. Есть ли какие-либо планы или, по крайней мере, запрос на добавление функций, которые я могу поддержать?

Я уже знаю, что вы можете использовать \n\ в конце каждой строки, это не то, что я хочу.

Ответы [ 8 ]

127 голосов
/ 03 июня 2011

узел v4 и текущие версии узла

Начиная с ES6 (и, следовательно, версий Node больше, чем v4), в Javascript был добавлен новый встроенный тип «шаблонный литерал» (обозначаемый обратными галочками «»), который также можно использовать для создания многострочных строк , как в:

`this is a 
single string`

, который оценивается как: 'this is a\nsingle string'.

Обратите внимание, что символ новой строки в конце первой строки - это , включенный в результирующую строку.

Были добавлены литералы шаблонов, чтобы позволить программистам создавать строки, в которые значения или код можно было бы напрямую вводить в строковый литерал, не используя util.format или другие шаблоны, как в:

let num=10;

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

, который будет печатать "результат 10 плюс 10 равен 20." на консоль.

Старые версии узла

В более старой версии узла может использоваться символ «продолжение строки», позволяющий писать многострочные строки, такие как:

'this is a \
single string'

, что соответствует: 'this is a single string'.

Обратите внимание, что символ новой строки в конце первой строки не включен в результирующую строку.

43 голосов
/ 11 сентября 2015

Многострочные строки являются текущей частью JavaScript (начиная с ES6) и поддерживаются в node.js v4.0.0 и новее.

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

console.log(text);
39 голосов
/ 03 июня 2011

Что именно вы ищете, когда имеете в виду многострочные строки.

Вы ищете что-то вроде:

var str = "Some \
    String \
    Here";

Что будет печататься как "Some String Here"?

Если это так, имейте в виду, что вышеупомянутое является допустимым Javascript, но это не так:

var str = "Some \ 
    String \
    Here";

Какая разница? Пробел после \. Получайте удовольствие отлаживая это.

8 голосов
/ 14 ноября 2012

Посмотрите на модуль mstring для node.js.

Это простой маленький модуль, который позволяет вам иметь многострочные строки в JavaScript.

Просто сделайте это:

var M = require('mstring')

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

, чтобы получить

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

И это почти все.

Как это работает
В Node.js вы можете вызвать метод .toStringфункции, и он даст вам исходный код определения функции, включая любые комментарии.Регулярное выражение захватывает содержание комментария.

Да, это хак.Вдохновленный одноименным комментарием от Доминик Тарр .


примечание: модуль (по состоянию на 2012/13/11) не допускает пробелы дозакрытие ***/, так что вам нужно взломать его в себе.

6 голосов
/ 03 июня 2011

В дополнение к тому, что люди публикуют здесь, я слышал, что конкатенация может быть намного быстрее, чем объединение в современных javascript vms.Значение:

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

Будет медленнее, чем:

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

В некоторых случаях.http://jsperf.com/string-concat-versus-array-join/3

В качестве еще одного отступления я нахожу эту одну из наиболее привлекательных функций в Coffeescript .Да, да, я знаю, ненавистники будут ненавидеть.

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

Это особенно хорошо для фрагментов HTML.Я не говорю, что это причина использовать его, но я бы хотел, чтобы он приземлился на земле, где есть экма: - (.

Джош

4 голосов
/ 04 июня 2011

Взгляните на CoffeeScript: http://coffeescript.org

Он поддерживает многострочные строки, интерполяцию, понимание массива и много других приятных вещей.

1 голос
/ 03 августа 2015

Если вы используете io.js, он поддерживает многострочные строки, как в ECMAScript 6.

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

См. "Новые методы строк" в http://davidwalsh.name/es6-io для получения подробной информации и"строки шаблона" на http://kangax.github.io/compat-table/es6/ для отслеживания совместимости.

0 голосов
/ 04 июня 2011

Vanilla Javascipt не поддерживает многострочные строки.Языковые препроцессоры оказываются выполнимыми в наши дни.

CoffeeScript, самый популярный из них имеет эту функцию, но он не минимален, это новый язык.Компилятор Google traceur добавляет новые функции в язык как надмножество, но я не думаю, что многострочные строки - это одна из добавленных функций.

Я хочу создать минимальный надмножество javascript, поддерживающее многострочныйструны и пара других функций.Я начал этот маленький язык некоторое время назад, прежде чем писать первоначальный компилятор для coffeescript.Я планирую закончить это этим летом.

Если прекомпиляторы не являются опцией, есть также хак с тегом script, где вы сохраняете свои многострочные данные в теге script в html, но даете егопользовательский тип, чтобы его не уклоняли.Затем, используя javascript, вы можете извлечь содержимое тега script.

Кроме того, если вы поставите \ в конце любой строки в исходном коде, это приведет к игнорированию новой строки, как если бы онатам не былоЕсли вы хотите новую строку, то вы должны закончить строку с "\ n \".

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...