Node.js'de çok satırlı bir dizeyi nasıl yaparım?


128

Node.js'nin yükselişiyle birlikte, JavaScript'te çok satırlı dizeler daha gerekli hale geliyor.

  1. Tarayıcılarda çalışmasa bile bunu Node.JS'de yapmanın özel bir yolu var mı?
  2. Bunu yapmak için destekleyebileceğim herhangi bir plan veya en azından bir özellik isteği var mı?

\n\Her satırın sonunda kullanabileceğinizi zaten biliyorum, istediğim bu değil.


1
Neden sabit satır dönüşleri eklemeniz gerekiyor? DOM'daki hiçbir şey bunu desteklemez ("pre" hariç) ve diğer tüm genel dönüş türleri umursamaz.
jcolebrand

Bu yüzden sağda iadeler olmadan solda sekmelerle son bulmuyorum. İkisine de sahip olmayı veya hiçbirini sevmem. Şu anda HTML'mi print( '<div>')yazdırmak için kullanıyorum . Ne sekmeleri ne de "düzgün" dönüşleri vardır, ancak Perl <<EOF..EOFstili bir dizgi veya Java tarzı bir JSP dosyası kullanmak daha kolay olacaktır . Her neyse, çok satırlı dizge geldiğinde değişkenleri girebilmem gerekiyor. Şimdilik onsuz yapacağım.
Bryan Field

9
@jcolebrand: Node.JS öncelikle DOM manipülasyonuyla ilgilenmez. Tam bir uygulama geliştirme ortamıdır. Bkz nodejs.org
Roy Tinker

@RoyTinker evet, ama o zamanlar tarayıcıları çağırdı ve bunun üzerine \nuygulamaların yapılmamasını söyledi , yani ... bu sadece tarayıcılar için oldukça iyi.
jcolebrand

@GeorgeBailey Hala yığın taşması kullanıyorsanız, doğru yanıtı burada düzeltebilir misiniz?
mikemaccana

Yanıtlar:


165

düğüm v4 ve düğümün geçerli sürümleri

ES6'dan itibaren (ve bu nedenle v4'ten büyük Düğüm sürümleri), Javascript'e yeni bir "şablon değişmez" iç türü eklendi ("" geri işaretleriyle gösterilir), bu da şu şekilde olduğu gibi çok satırlı dizeler oluşturmak için kullanılabilir :

`this is a 
single string`

Hangi değerlendirir: 'this is a\nsingle string'.

İlk satırın sonunda satır unutmayın edilir çıkan dizede dahil.

Şablon değişmezleri, programcıların, değerlerin veya kodun, aşağıdaki util.formatşablonlarda olduğu gibi, kullanmak zorunda kalmadan bir dize hazır bilgisine doğrudan enjekte edilebildiği dizeler oluşturmasına izin vermek için eklendi :

let num=10;

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

"10 artı 10'un sonucu 20'dir" yazacaktır. konsola.

Düğümün eski sürümleri

Düğümün eski sürümü, aşağıdakiler gibi çok satırlı dizeler yazmanıza olanak tanıyan bir "satır devamı" karakteri kullanabilir:

'this is a \
single string'

Hangi değerlendirir: 'this is a single string'.

İlk satırın sonunda satır unutmayın değil Sonuç dizesinde dahil.


Sanırım sonunda stackoverflow.com/questions/805107/… 'yi kullanacağım . Değişkenleri kullanabilmek için onu genişletebilirim. Kesinlikle yaratıcı olacak! Ancak bu Node.JS olduğundan, tarayıcı uyumluluğu konusunda endişelenmeme gerek yok ve benim durumumda sürüm uyumluluğu bile yok.
Bryan Field

6
"Javascript çok satırlı dizeleri desteklemiyor ..." ES5'ten itibaren çalışıyor ve V8'de (Google'ın JavaScript motoru), yani muhtemelen NodeJS'de (V8 kullanan). Bkz LineContinuation içinde [Bölüm 7.8.4] * ( es5.github.com/#x7.8.4 ). Araç desteği bir süre yarım yamalak olabilir.
TJ Crowder

İo.js'de ama henüz Node.JS'de değil - Birkaç bağlantı daha ekledim
Simon D

1
Node 4.0+ artık çok satırlı dizeleri özünde destekliyor.
Rob Raisch

46

Çok satırlı dizeler JavaScript'in güncel bir parçasıdır (ES6'dan beri) ve node.js v4.0.0 ve daha yeni sürümlerde desteklenmektedir.

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

console.log(text);

2
Bu cevap hemen en üste oylanmalıdır! Şablon dizeleriyle ilgili ayrıntılar için developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/… bakın .
user3413723

2
Şablonun içine $ {variablehere} sözdizimi ekleyerek değişkenleri kolayca ekleyebileceğinizi not etmek isteyebilirsiniz (`` işaretler)
Joseph Astrahan

40

Çok satırlı dizeleri kastettiğinizde tam olarak ne arıyorsunuz?

Şunun gibi bir şey mi arıyorsunuz:

var str = "Some \
    String \
    Here";

Hangisi "Burada Bir Dize" olarak yazdırılır?

Öyleyse, yukarıdakinin geçerli bir Javascript olduğunu, ancak bunun geçerli olmadığını unutmayın:

var str = "Some \ 
    String \
    Here";

Fark ne? Sonra bir boşluk \. Hata ayıklarken iyi eğlenceler.


bunu saçma. \ 'Den sonraki boşluğu oraya bir karakter koymadan göstermeme izin vermiyor.
jcolebrand

1
@jcolebrand: Evet, oldukça eğlenceli değil mi: P
Robert


1
Bu kirli bir hack. Lütfen hayır!
Raynos

1
Teşekkürler @Robert, '\' analizinden sonraki boşluk bana biraz zaman kazandırdı!
gpestana

8

Node.js için mstring modülüne bir göz atın.

Bu, JavaScript'te çok satırlı dizelere sahip olmanızı sağlayan basit bir küçük modüldür.

Sadece şunu yap:

var M = require('mstring')

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

almak

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

Ve hemen hemen bu kadar.

Nasıl Çalışır
Node.js'de, .toStringbir işlevin yöntemini çağırabilirsiniz ve bu size herhangi bir yorum da dahil olmak üzere işlev tanımının kaynak kodunu verecektir. Normal ifade, yorumun içeriğini alır.

Evet, bu bir hack. Dominic Tarr'ın attığı bir yorumdan esinlenilmiştir .


not: Modül (2012/13/11 itibariyle) kapanıştan önce beyaz boşluğa izin vermez ***/, bu yüzden onu kendi kendinize kırmanız gerekir.


1
Veya boşluk düzeltmesini içeren mstring dalınızı kullanın. Teşekkürler! github.com/davidmurdoch/mstring
Druska

6

İnsanların buraya yazdıklarının yanı sıra, birleştirme işleminin modern javascript vms'ye katılmaktan çok daha hızlı olabileceğini duydum. Anlamı:

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

Şundan daha yavaş olacaktır:

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

Bazı durumlarda. http://jsperf.com/string-concat-versus-array-join/3

Diğer bir yana, bunu Coffeescript'teki daha çekici özelliklerden biri olarak görüyorum . Evet, evet biliyorum, nefret edenler nefret edecek.

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

Özellikle html parçacıkları için güzel. Bunun onu kullanmak için bir neden olduğunu söylemiyorum ama keşke ecma diyarına inse :-(.

alay etmek


1
Benim için CoffeeScript ile ilgili yanlış olan tek şey, son kontrol ettiğim Groovy ile aynı şeydi. Bir dosya dönüştürülür zaman .coffeeiçin .js, satır numaraları karışık edilir. CoffeeScript'i denemedim, ancak Groovy'yi denediğimde, oluşturulan .javadosyaları almadan hata ayıklamayı oldukça zor buldum .
Bryan Field

Kahvede oldukça büyük projeler yazdım. Derlenmiş koda bakmak zorunda kalırsınız. Bununla birlikte, okunması kolaydır. imo, içinde birkaç büyük proje yazılmasına rağmen (zombie.js, pow, riak-js), düğüm topluluğunda hala kahve ile ilgili kabul edilemez bir damgalama var. Şu anda daha küçük OSS'mden bazılarını aktarıyorum, çünkü kitaplığı kullanmak için kahve kullanmak zorunda olmamanıza rağmen insanlar 'oh, kahve, iğrenç' diyor ve hemen devam ediyor.
Josh

Ben Coffeescript'ten nefret ediyorum. : P Ama, kesinlikle '' 'dizi bloğunun hayranıyım! Veya ... PHP heredoc sözdizimi.
BMiner

Dizi örüntüsü (birleştirme ('\ n') kullanan) çoğu durumda düz eski dize birleştirmeden daha yavaş olacaktır.
BMiner

1
IE7 ve altı dışında, bu doğrudur. Ve not edeceksin, bunu söyledim ve jsperf ile bağlantılı.
Josh



1

Kabul edilen cevaba ek olarak:

`this is a 
single string`

bu da şu şekilde değerlendirilir: 'bu bir \ ntek dizedir'.

Yeni bir satır olmadan dize enterpolasyonu kullanmak istiyorsanız, normal dizede olduğu gibi ters eğik çizgi eklemeniz yeterlidir:

`this is a \
single string`

=> 'bu tek bir dizedir'.

Yine de manuel beyaz alanın gerekli olduğunu unutmayın:

`this is a\
single string`

=> 'bu tek bir dizedir'


0

Vanilla Javascipt, çok satırlı dizeleri desteklemez. Dil ön işlemcileri bugünlerde uygulanabilir hale geliyor.

Bunların en popüler olanı CoffeeScript bu özelliğe sahip, ancak minimal değil, yeni bir dil. Google'ın izleme derleyicisi, dile bir üst küme olarak yeni özellikler ekler, ancak çok satırlı dizelerin eklenen özelliklerden biri olduğunu düşünmüyorum.

Çok satırlı dizeleri ve birkaç başka özelliği destekleyen minimal bir javascript üst kümesi yapmak istiyorum. Bu küçük dile kahve için ilk derleyiciyi yazmadan bir süre önce başladım. Bu yaz bitirmeyi planlıyorum.

Ön derleyiciler bir seçenek değilse, çok satırlı verilerinizi html'deki bir komut dosyası etiketinde sakladığınız, ancak değerlendirilmemesi için özel bir tür verdiğiniz komut dosyası etiketi saldırısı da vardır. Daha sonra javascript kullanarak komut dosyası etiketinin içeriğini çıkarabilirsiniz.

Ayrıca, kaynak kodda herhangi bir satırın sonuna bir \ koyarsanız, satırsonu orada yokmuş gibi göz ardı edilir. Yeni satırı istiyorsanız, satırı "\ n \" ile sonlandırmanız gerekir.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.