Як зробити багаторядковий рядок у node.js?


128

З підвищенням node.js багаторядкові рядки стають все більш необхідними в JavaScript.

  1. Чи існує спеціальний спосіб зробити це в Node.JS, навіть якщо він не працює в браузерах?
  2. Чи є якісь плани або хоча б функція прохання зробити це, що я можу підтримати?

Я вже знаю, що ви можете використовувати \n\в кінці кожного рядка, це не те, що я хочу.


1
Чому на землі вам потрібно вставити тверді рядкові повернення? Ніщо в DOM цього не підтримує (крім «попереднього»), а всі інші загальні типи повернення не хвилюються.
jcolebrand

Тому я не закінчую вкладками зліва без повернень справа. Мені подобається мати або те, і інше. Зараз я використовую print( '<div>')для друку свого HTML. У ньому немає ні вкладок, ні повернень, що є "акуратним", але було б простіше використовувати <<EOF..EOFрядок стилю Perl або файл JSP у стилі Java. У всякому разі, мені потрібно мати можливість вводити змінні в багаторядковий рядок, коли він приходить. Я зараз обійдуся без.
Брайан Філд

9
@jcolebrand: Node.JS стосується не в першу чергу маніпуляцій DOM. Це повне середовище розробки додатків. Дивіться nodejs.org
Рой Тінкер

@RoyTinker так, але в той час він закликав браузери, і, крім цього, він викликав невиконання \n, так що це досить добре лише браузери.
jcolebrand

@GeorgeBailey Якщо ви все ще використовуєте переповнення стека, можете виправити тут правильну відповідь?
mikemaccana

Відповіді:


164

вузол 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'.

Зауважте, що новий рядок в кінці першого рядка не включається в результуючий рядок.


Я думаю, що в кінцевому підсумку я буду використовувати stackoverflow.com/questions/805107/… . Я можу розширити його, щоб я міг використовувати змінні. Це буде творчо точно! Але оскільки це Node.JS, мені не доведеться турбуватися про сумісність браузера, а в моєму випадку навіть про сумісність версій.
Брайан Філд

6
"Javascript не підтримує багаторядкові рядки ..." Це робиться як в ES5, так і в V8 (JavaScript-механізмі Google), так що, імовірно, в NodeJS (який використовує V8). Дивіться LineContinuation в [Розділ 7.8.4] * ( es5.github.com/#x7.8.4 ). Підтримка інструментів певний час може бути схематичною.
TJ Crowder

Це в io.js, але ще не в Node.JS - я додав відповідь ще з кількома посиланнями
Simon D

1
Node 4.0+ тепер підтримує багаторядкові рядки.
Роб Райш

46

Багаторядкові рядки є поточною частиною JavaScript (з ES6) і підтримуються в node.js v4.0.0 та новіших версіях.

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

console.log(text);

2
За цю відповідь слід негайно проголосувати вгорі! Докладніше про рядки шаблону див. У програмі developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/… .
користувач3413723

2
Ви можете зауважити, що ви можете легко додати змінні, додавши синтаксис $ {variablehere} всередині шаблону (`` тики)
Джозеф Астрахан,

40

Що саме ви шукаєте, маючи на увазі багаторядкові рядки.

Шукаєте щось подібне:

var str = "Some \
    String \
    Here";

Що було б надруковано як "Some String Here"?

Якщо так, майте на увазі, що вищезазначений дійсний Javascript, але це не:

var str = "Some \ 
    String \
    Here";

Яка різниця? Простір після \. Весело налагоджуючи це.


добре виїмки, що. Це не дозволить мені показати пробіл після \, не додаючи туди символ.
jcolebrand

1
@jcolebrand: Так, дуже весело, чи не так: P
Роберт


1
Це брудний злом. Будь ласка, ні!
Райнос

1
Дякую @Robert, простір після "\" проникнення заощадив мене деякий час!
gpestana

8

Подивіться на 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) не передбачає пробілів перед закриттям ***/, тому вам потрібно буде зламати його в собі.


1
Або скористайтеся вашою гілкою mstring, яка містить виправлення пробілів. Дякую! github.com/davidmurdoch/mstring
Druska

6

Як осторонь того, що люди публікують тут, я чув, що конкатенація може бути набагато швидшою, ніж приєднання до сучасних JavaScript-файлів JavaScript. Значення:

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. Я не кажу, що це є причиною його використання, але я хочу, щоб він приземлився в ecma land :-(.

Джош


1
Єдине, що не так з CoffeeScript для мене, це те саме, що неправильно з Groovy востаннє я перевірив. При перетворенні файлу .coffeeв .js, номери рядків змішуються. Я не пробував CoffeeScript, але коли я спробував Groovy, мені було важко налагоджувати, не отримуючи створені .javaфайли.
Брайан Філд

Я написав кілька досить великих проектів у каві. Вам все-таки доведеться подивитися на складений код. Однак її легко читати. imo, все ще існує неприйнятна стигма з coffeescript у спільноті вузлів, хоча в ній написано кілька великих проектів (zombie.js, pow, riak-js). Наразі я переношу деякі мої менші ОСС, оскільки люди кажуть "о, кава, юк" і негайно рухаються далі, незважаючи на те, що вам не потрібно використовувати каву, щоб користуватися бібліотекою.
Джош

Я ненавиджу Coffeescript. : P Але я, безумовно, шанувальник '' 'рядкового блоку! Або ... PHP синтаксис heredoc.
BMiner

Шаблон масиву (використовуючи приєднання ('\ n')) у більшості випадків буде повільніше, ніж звичайне старе рядування.
BMiner

1
За винятком IE7 і нижче, це правда. І ви зауважте, я це сказав і пов’язаний з jsperf.
Джош



1

Окрім прийнятої відповіді:

`this is a 
single string`

який оцінює: "це рядок \ nsingle".

Якщо ви хочете використовувати інтерполяцію рядків, але без нового рядка, просто додайте зворотну косу рису, як у звичайному рядку:

`this is a \
single string`

=> 'це одна рядок'.

Майте на увазі, хоча поле пробілу необхідне:

`this is a\
single string`

=> 'це рядок asingle'


0

Vanilla Javascipt не підтримує багаторядкові рядки. У цей час мовні попередні процесори виявляються здійсненними.

CoffeeScript, найпопулярніший з них має цю особливість, але це не мінімально, це нова мова. Компілятор відстеження Google додає нові функції до мови як суперсет, але я не думаю, що рядкові рядки є однією з додаткових функцій.

Я хочу зробити мінімальний набір javascript, який підтримує багаторядкові рядки та пару інших функцій. Я почав цю маленьку мову ще задовго до того, як писати початковий компілятор для coffeescript. Планую закінчити це влітку цього року.

Якщо попередні компілятори не є варіантом, є також тег скриптів, у якому ви зберігаєте свої багаторядкові дані в тезі сценарію в html, але надайте їм користувацький тип, щоб він не вилучався. Потім пізніше за допомогою javascript ви можете витягнути вміст тегу сценарію.

Крім того, якщо ви помістите \ в кінці будь-якого рядка у вихідний код, це призведе до ігнорування нового рядка, як ніби його не було. Якщо ви хочете новий рядок, вам доведеться закінчити рядок "\ n \".

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.