Как сделать многострочную строку в node.js?

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

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

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

Ответ 1

node v4 и текущие версии node

В ES6 (и, следовательно, версии Node больше, чем v4) в Javascript добавлен новый "шаблонный литерал", который также можно использовать для создания мульти- строки, как в:

`this is a 
single string`

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

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

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

let num=10;

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

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

Старые версии node

Старая версия Node может использовать символ "продолжение строки", позволяющий писать многострочные строки, такие как:

'this is a \
single string'

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

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

Ответ 2

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

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

console.log(text);

Ответ 3

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

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

var str = "Some \
    String \
    Here";

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

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

var str = "Some \ 
    String \
    Here";

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

Ответ 4

Взгляните на 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 для функции, и он даст вам исходный код определения функции, включая любые комментарии. Регулярное выражение захватывает содержимое комментария.

Да, это взломать. Вдохновленный небольшим комментарием от Dominic Tarr.


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

Ответ 5

В отличие от того, что люди публиковали здесь, я слышал, что конкатенация может быть намного быстрее, чем присоединиться к современным 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-фрагментов. Я не говорю, что это причина для его использования, но я бы хотел, чтобы он приземлился в экма-земле: - (.

Джош

Ответ 6

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

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

Ответ 7

Если вы хотите (как я) поддерживать строки, подобные этому в NodeJS:

<<<my_var
This a very large string
>>>

<<<my_sql
SELECT
    *
FROM my_table
WHERE
    field = 'true';
>>>

Вы должны попробовать этот плагин.

Ответ 8

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

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

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

Ответ 9

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

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

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

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

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

Ответ 10

В дополнение к принятому ответу:

'this is a 
single string'

который оценивается как "это строка \nsingle".

Если вы хотите использовать интерполяцию строк, но без новой строки, просто добавьте обратную косую черту как в обычной строке:

'this is a \
single string'

=> "это одна строка".

Имейте в виду, что пробелы вручную необходимы:

'this is a\
single string'

=> "это одна строка"