मैं एक बहु-पंक्ति स्ट्रिंग को नोड.जेएस में कैसे करूं?


128

नोड.जेएस के उदय के साथ, जावास्क्रिप्ट में मल्टी-लाइन स्ट्रिंग्स अधिक आवश्यक हो रहे हैं।

  1. क्या Node.JS में ऐसा करने का कोई विशेष तरीका है, भले ही वह ब्राउज़र में काम न करे?
  2. क्या कोई योजना है या कम से कम यह करने के लिए एक सुविधा अनुरोध है कि मैं समर्थन कर सकता हूं?

मुझे पहले से ही पता है कि आप \n\हर लाइन के अंत में उपयोग कर सकते हैं , यही वह नहीं है जो मैं चाहता हूं।


1
पृथ्वी पर आपको हार्ड लाइन रिटर्न डालने की आवश्यकता क्यों होगी? DOM में कुछ भी समर्थन नहीं करता है ("पूर्व" को छोड़कर), और अन्य सभी सामान्य रिटर्न प्रकार परवाह नहीं करते हैं।
jcolebrand

इसलिए मैं दाईं ओर रिटर्न के बिना बाईं ओर टैब के साथ समाप्त नहीं होता। मुझे दोनों में से कोई भी पसंद है। अभी मैं print( '<div>')अपने HTML को प्रिंट करने के लिए उपयोग कर रहा हूं। इसमें न तो टैब है और न ही रिटर्न जो "नीट" है, लेकिन पर्ल <<EOF..EOFस्टाइल स्ट्रिंग या जावा-स्टाइल एसएसपी फाइल का उपयोग करना आसान होगा । वैसे भी, मुझे मल्टी-लाइन स्ट्रिंग में वेरिएबल इनपुट करने में सक्षम होना चाहिए जब यह आता है। मैं अभी के लिए बिना करूँगा।
ब्रायन फील्ड

9
@jcolebrand: Node.JS मुख्य रूप से DOM हेरफेर से संबंधित नहीं है। यह एक पूर्ण अनुप्रयोग विकास वातावरण है। देखें नोडज.ओआर
रॉय टिंकर

@RoyTinker हाँ, लेकिन उसने उस समय ब्राउज़रों को कॉल किया, और उसके शीर्ष पर उसने गैर- \nकार्यान्वयनों को कॉल किया, इसलिए ... यह केवल बहुत अच्छा ब्राउज़र है।
jcolebrand

@GeorgeBailey यदि आप अभी भी स्टैक ओवरफ्लो का उपयोग करते हैं, तो क्या आप यहां सही उत्तर दे सकते हैं?
मिकमेकाना

जवाबों:


164

नोड v4 और नोड के वर्तमान संस्करण

ES6 के रूप में (और v4 से अधिक नोड के संस्करण), एक नया "टेम्पलेट शाब्दिक" आंतरिक प्रकार जावास्क्रिप्ट में जोड़ा गया था (बैक-टिक्स "` "द्वारा चिह्नित) जिसका उपयोग मल्टी-लाइन स्ट्रिंग्स के निर्माण के लिए भी किया जा सकता है। :

`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
"जावास्क्रिप्ट मल्टी-लाइन स्ट्रिंग्स का समर्थन नहीं करता है ..." यह ES5 के रूप में करता है, और यह V8 (Google के जावास्क्रिप्ट इंजन) में है, इसलिए संभवतः नोड्स (जो वी 8 का उपयोग करता है) में। देखें LineContinuation में [धारा 7.8.4] * ( es5.github.com/#x7.8.4 )। उपकरण समर्थन थोड़ी देर के लिए स्केच हो सकता है।
TJ Crowder

यह io.js में है, लेकिन नोड नहीं।जेएस अभी तक - मैंने एक जोड़े के साथ एक और लिंक जोड़ा
सिमोन डी

1
नोड 4.0+ अब आंतरिक रूप से मल्टीलाइन स्ट्रिंग्स का समर्थन करता है।
रोब रईस

46

मल्टीलाइन स्ट्रिंग्स जावास्क्रिप्ट का एक वर्तमान हिस्सा हैं (ES6 के बाद से) और नोड में समर्थित हैं। 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/... टेम्पलेट तार पर जानकारी के लिए।
user3413723

2
कृपया ध्यान दें कि आप टेम्पलेट के अंदर $ {परिवर्तनीय} सिंटैक्स जोड़कर आसानी से चर जोड़ सकते हैं (`` टिक)
जोसेफ अस्त्रान

40

जब आप मल्टीलाइन स्ट्रिंग्स का मतलब चाहते हैं तो आप वास्तव में क्या देख रहे हैं।

क्या आप कुछ ढूंढ रहे हैं:

var str = "Some \
    String \
    Here";

जो "कुछ स्ट्रिंग यहाँ" के रूप में मुद्रित होगा?

यदि हां, तो ध्यान रखें कि उपरोक्त मान्य जावास्क्रिप्ट है, लेकिन यह नहीं है:

var str = "Some \ 
    String \
    Here";

क्या फर्क पड़ता है? के बाद एक जगह \। मज़ा डिबगिंग है कि।


अच्छी तरह से बोलता है कि। यह मुझे वहाँ एक चरित्र डालने के बिना \ के बाद अंतरिक्ष दिखाने नहीं देंगे।
jcolebrand

1
@jcolebrand: हाँ, यह बहुत मज़ेदार नहीं है: P
रॉबर्ट


1
यह एक गंदी हैक है। कृपया नहीं!
रेयानोस

1
धन्यवाद @Robert, '\' अंतर्दृष्टि के बाद अंतरिक्ष ने मुझे कुछ समय बचाया!
gpestana

8

नोड.जेएस के लिए mstring मॉड्यूल पर एक नज़र डालें

यह एक साधारण सा मॉड्यूल है जो आपको जावास्क्रिप्ट में मल्टी-लाइन स्ट्रिंग्स देता है।

बस यह करें:

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
या अपनी शाखा का उपयोग करें जिसमें व्हाट्सएप फिक्स हो। धन्यवाद! github.com/davidmurdoch/mstring
Druska

6

एक तरफ के रूप में लोगों को यहाँ पोस्ट किया गया है, मैंने सुना है कि आधुनिक जावास्क्रिप्ट जावास्क्रिप्ट में शामिल होने की तुलना में संघनन बहुत तेज हो सकता है। अर्थ:

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

एक और बात के रूप में, मुझे यह कॉफ़ीसेस्क्रिप्ट में अधिक आकर्षक विशेषताओं में से एक लगता है । हाँ, हाँ, मुझे पता है, नफरत करने वाले नफरत करते हैं।

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

Html स्निपेट्स के लिए इसका विशेष रूप से अच्छा है। मैं इसका उपयोग करने का कोई कारण नहीं कह रहा हूं, लेकिन मेरी इच्छा है कि यह एक्मा भूमि में उतरे :-(

जोश


1
मेरे लिए CoffeeScript में एक ही चीज़ गलत है, एक ही चीज़ Groovy के साथ गलत है, आखिरी बार मैंने जाँच की थी। जब एक फ़ाइल से परिवर्तित किया .coffeeजाता है .js, तो लाइन नंबर जंबल हो जाते हैं। मैंने कॉफ़ीस्क्रिप्ट की कोशिश नहीं की है, लेकिन जब मैंने ग्रूवी की कोशिश की, तो मुझे उत्पन्न .javaफ़ाइलों के बिना डिबग करना काफी मुश्किल लगा ।
ब्रायन फील्ड

मैंने कॉफी में कुछ यथोचित बड़ी परियोजनाएँ लिखी हैं। आप संकलित कोड को देखने के लिए अंत करते हैं। हालांकि, यह पढ़ना आसान है। imo अभी भी नोड समुदाय में कॉफ़ीस्क्रिप्ट के साथ अस्वीकार्य कलंक है, हालांकि इसमें कई बड़ी परियोजनाएं लिखी गई हैं (zombie.js, pow, riak-js)। मैं वर्तमान में अपने कुछ छोटे ओएसएस को पोर्ट कर रहा हूं, क्योंकि लोग कहते हैं कि 'ओह, कॉफी, युक' और तुरंत आगे बढ़ें, इस तथ्य के बावजूद कि आपको लाइब्रेरी का उपयोग करने के लिए कॉफी का उपयोग करने की आवश्यकता नहीं है।
जोश

मुझे कॉफ़ीस्क्रिप्ट से नफरत है। : पी लेकिन, मैं निश्चित रूप से '' '' स्ट्रिंग ब्लॉक का प्रशंसक हूं! या ... PHP heredoc सिंटैक्स।
बीएमएनर जूल

सरणी पैटर्न (ज्वाइन ('\ n') का उपयोग करना ज्यादातर मामलों में सादे-पुराने स्ट्रिंग के संघनन की तुलना में धीमा होगा।
बीएमएनर

1
IE7 और नीचे को छोड़कर, यह सच है। और आप ध्यान देंगे, मैंने कहा कि और jsperf से जुड़ा।
जोश

4

CoffeeScript पर एक नज़र डालें: http://coffeescript.org

यह मल्टी-लाइन स्ट्रिंग्स, इंटरपोलेशन, एरो कॉम्प्रिहेंशन और बहुत सारे अन्य अच्छे सामानों का समर्थन करता है।


1

यदि आप io.js का उपयोग करते हैं, तो इसके पास मल्टी-लाइन स्ट्रिंग्स के लिए समर्थन है क्योंकि वे ECMAScript 6 में हैं।

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

विवरण के लिए http://davidwalsh.name/es6-io पर "नई स्ट्रिंग पद्धतियां" देखें और ट्रैकिंग संगतता के लिए http://kangax.github.io/compat-table/es6/ पर "टेम्पलेट स्ट्रिंग्स" देखें ।


1

स्वीकृत उत्तर के अलावा:

`this is a 
single string`

जो मूल्यांकन करता है: 'यह एक \ n सिंगसल स्ट्रिंग है'।

यदि आप स्ट्रिंग प्रक्षेप का उपयोग करना चाहते हैं, लेकिन एक नई लाइन के बिना, सामान्य स्ट्रिंग की तरह बैकस्लैश जोड़ें:

`this is a \
single string`

=> 'यह एक एकल तार है'।

हालांकि मैनुअल व्हाट्सएप को ध्यान में रखना आवश्यक है:

`this is a\
single string`

=> 'यह एसिंगल स्ट्रिंग है'


0

वेनिला Javascipt मल्टी-लाइन स्ट्रिंग्स का समर्थन नहीं करता है। भाषा पूर्व-प्रोसेसर इन दिनों संभव हो रहे हैं।

कॉफीस्क्रिप्ट, इनमें से सबसे लोकप्रिय में यह विशेषता है, लेकिन यह न्यूनतम नहीं है, यह एक नई भाषा है। Google का ट्रेसुर कंपाइलर एक सुपरसेट के रूप में भाषा में नई विशेषताओं को जोड़ता है, लेकिन मुझे नहीं लगता कि मल्टी-लाइन स्ट्रिंग्स जोड़ा सुविधाओं में से एक है।

मैं जावास्क्रिप्ट का एक न्यूनतम सुपरसेट बनाने के लिए देख रहा हूं जो मल्टीलाइन स्ट्रिंग्स और कुछ अन्य विशेषताओं का समर्थन करता है। मैंने कॉफ़ी के लिए प्रारंभिक संकलक लिखने से पहले थोड़ी देर पहले इस छोटी भाषा को शुरू किया था। मैं इसे इस गर्मी में खत्म करने की योजना बना रहा हूं।

यदि प्री-कंपाइलर एक विकल्प नहीं हैं, तो स्क्रिप्ट टैग हैक भी है जहां आप अपने मल्टी-लाइन डेटा को html टैग में स्क्रिप्ट टैग में संग्रहीत करते हैं, लेकिन इसे एक कस्टम प्रकार देते हैं ताकि यह विकसित न हो। फिर बाद में जावास्क्रिप्ट का उपयोग करके, आप स्क्रिप्ट टैग की सामग्री निकाल सकते हैं।

इसके अलावा, यदि आप स्रोत कोड में किसी भी लाइन के अंत में एक डालते हैं, तो यह नई लाइन को अनदेखा कर देगा जैसे कि वह नहीं था। यदि आप नईलाइन चाहते हैं, तो आपको "\ n \" के साथ लाइन को समाप्त करना होगा।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.