मैं <br /> तत्वों के साथ स्ट्रिंग में सभी पंक्ति विराम कैसे प्रतिस्थापित करूं?


536

मैं जावास्क्रिप्ट के साथ मान से लाइन ब्रेक कैसे पढ़ सकता हूं और <br />तत्वों के साथ सभी लाइन ब्रेक को बदल सकता हूं ?

उदाहरण:

नीचे से PHP के रूप में एक चर पारित किया गया:

  "This is man.

     Man like dog.
     Man like to drink.

     Man is the king."

मैं अपना परिणाम कुछ इस तरह से देखना चाहूंगा जैसे कि जावास्क्रिप्ट ने इसे परिवर्तित किया:

  "This is man<br /><br />Man like dog.<br />Man like to drink.<br /><br />Man is the king."

1
आपके मूल प्रश्न में कुछ गड़बड़ है? stackoverflow.com/questions/784313/...
harto

1
जावास्क्रिप्ट में भेजने से पहले आप PHP में nl2br ($ string) भी कर सकते हैं।
एलेक्स

1
मैं पहले वाले प्रश्न को बंद करने के लिए मतदान करने जा रहा हूं, क्योंकि इसका एक बेहतर उदाहरण है।
पलकहीनता

2
उसे तब प्रारंभिक प्रश्न को संपादित करना चाहिए
निक

मैं यहाँ एक गलत समझ से आया था जो .text () के साथ चल रहा था। यदि आप भी यही कर रहे हैं, तो stackoverflow.com/q/35238362/1467396 पर देखें
डेविड

जवाबों:


1202

यह सभी रिटर्न को HTML में बदल देगा

str = str.replace(/(?:\r\n|\r|\n)/g, '<br>');

मामले में आपको आश्चर्य है कि क्या ?: का मतलब है। इसे नॉन-कैप्चरिंग ग्रुप कहा जाता है। इसका अर्थ है कि कोष्ठकों के भीतर रेगेक्स का समूह बाद में संदर्भित होने के लिए स्मृति में सहेजा नहीं जाएगा। अधिक जानकारी के लिए आप इन थ्रेड को देख सकते हैं:
https://stackoverflow.com/a/11530881/5042169 https://stackoverflow.com/a/36524555/5042169


77
बस अतिरिक्त ध्यान दें: str.replace("\n", '<br />')(पहला तर्क एक नियमित स्ट्रिंग है) केवल पहली घटना को प्रतिस्थापित करेगा।
सर्ज एस।

19
एक और संस्करण (कई लाइन-विराम को बदलने के लिए): str.replace (/ (\ n) + / g, '<br />');
रितेश

4
@SergeS। उस अतिरिक्त टिप्पणी के लिए धन्यवाद। बस मुझे समय का एक टन बचा लिया! jsfiddle
EleventyOne

4
@ शेर्स।, String#replaceअपने पहले तर्क Stringको एक बची हुई RegExpमिसाल से, बिना किसी झंडे के साथ उछालता है । str.replace('\n', '<br />');के बराबर हैstr.replace(new RegExp('\n'), '<br />');
eyelidlessness

2
यहाँ str.split("\n").join("<br />") jsperf.com/split-join-vs-replace-regex RegEx की तुलना में एक परीक्षण मामला थोड़ा तेज़ लगता है
Aley

390

यदि आपकी चिंता सिर्फ रेखा-चित्र प्रदर्शित कर रही है, तो आप ऐसा CSS के साथ कर सकते हैं।

<div style="white-space: pre-line">Some test
with linebreaks</div>

Jsfiddle: https://jsfiddle.net/5bvtL6do/2/

नोट : कोड फ़ॉर्मेटिंग और इंडेंटिंग पर ध्यान दें , क्योंकि सभी नईलाइन white-space: pre-lineप्रदर्शित होंगी (पाठ के बाद अंतिम नई पंक्ति को छोड़कर, फ़िडल देखें)।


59
महान जवाब ... अधिक upboats की जरूरत है!
इयान क्विगले

11
मैं यहाँ रेगीज़ की तलाश में आया था और इसी के साथ निकला था। बहुत सारे अवसरों में यह वही है जो लोग खोज रहे हैं। हम ईमेल के लिए लाइनब्रीक का उपयोग करते हैं और यह दिखाने की आवश्यकता है कि ईमेल HTML में कभी-कभी क्या दिखता है। Perfecto। प्रश्न को एक अलग प्रकाश में देखने के लिए धन्यवाद
मटमैट

1
यह वास्तविक लाइन ब्रेक के लिए काम कर सकता है, लेकिन क्या होगा अगर मेरे पास सवाल में "\ n" जैसा है? क्या मैं इसे सीएसएस द्वारा भी हल कर सकता हूं?
फ्रोक्स

18
इसके बजाय white-space: pre-wrap;मैं उपयोग करना पसंद करता हूं white-space: pre-line;(सभी के बाद अंतिम ब्रेक लाइन नहीं जोड़ने के लिए)
jpmottin

5
अच्छा लग रहा है लेकिन पहली पंक्ति से पहले एक विशाल स्थान के बारे में क्या? अजीब
टूलकिट

71

रेगेक्स के बिना:

str = str.split("\n").join("<br />");

2
यदि आप "\\ n" करते हैं, तो आप केवल "एन" पर विभाजन के साथ मुद्दों से बचेंगे।
क्राउडरसौप

10
@CrowderSoup हम्म? मैंने इसे अभी आज़माया है और \\nएक नई पंक्ति से मेल नहीं खाता, क्योंकि यह backslash+ की तलाश में है n
paulslater19

1
मैंने टेस्ट केस किया। RegEx थोड़ा तेज़ है, लेकिन अपने लिए देखें jsperf.com/split-join-vs-replace-regex
Aley

मैंने पाया कि यह जवाब तब तक काम नहीं आया जब तक कि स्लैश बच नहीं गया। उदाहरण के लिए: str = str.split ("\ n")। join ("<br />");
ACOMIT001

@ ACOMIT001 मुझे लगता है कि यह निर्भर करता है कि क्या स्ट्रिंग में एक नई रेखा है या एक अश्वेत और n है?
paulslater19

38

यह एक textarea से आने वाले इनपुट के लिए काम करता है

str.replace(new RegExp('\r?\n','g'), '<br />');

1
यह मेरे लिए सबसे अच्छा जवाब है क्योंकि आप \ r को नहीं भूले हैं, जो कुछ प्रणालियों पर प्रयोग किया जाता है
बार्टोलोमिज ज़ाल्स्की

1
यह इस सवाल का सबसे अच्छा जवाब है। लेकिन मैं सिर्फ साथ जाऊंगा न कि <br />। इसे एक देखें stackoverflow.com/questions/1946426/html-5-is-it-br-br-or-br
kheya

8

यदि स्वीकृत उत्तर आपके लिए सही काम नहीं कर रहा है तो आप कोशिश कर सकते हैं।

str.replace(new RegExp('\n','g'), '<br />')

इसने मेरे लिए काम किया।


2
new RegExp('\n', 'g')के समान है /\n/g(आदिम शाब्दिक बनाम उनके निर्माणकर्ताओं का उपयोग करने के बारे में कुछ minutiae को छोड़कर)।
आंखों की रोशनी

2
जो भी कारण, यह मेरे लिए काम किया, लेकिन स्वीकार किए जाते हैं जवाब नहीं
निक

1
आह, वही यहाँ ... लेकिन मेरी गलती /\n/gएक स्ट्रिंग के रूप में निर्दिष्ट करने का प्रयास कर रही थी !
डैनियल फोर्टुनोव

7

प्रणाली के बावजूद:

my_multiline_text.replace(/$/mg,'<br>');

1
सावधानी: यह किसी भी स्ट्रिंग के लिए '<br>' टैग को जोड़ देगा, भले ही इसमें कोई '\ n' हो।
मोकेलर 15

4

संभावित स्क्रिप्ट इंजेक्शन हमलों से बचाने के लिए बाकी पाठ को एनकोड करना भी महत्वपूर्ण है

function insertTextWithLineBreaks(text, targetElement) {
    var textWithNormalizedLineBreaks = text.replace('\r\n', '\n');
    var textParts = textWithNormalizedLineBreaks.split('\n');

    for (var i = 0; i < textParts.length; i++) {
        targetElement.appendChild(document.createTextNode(textParts[i]));
        if (i < textParts.length - 1) {
            targetElement.appendChild(document.createElement('br'));
        }
    }
}


2

आप में से उन लोगों के लिए जो अधिकतम अनुमति देना चाहते हैं। 2 <br>पंक्ति में, आप इसका उपयोग कर सकते हैं:

let text = text.replace(/(\r?\n){2,}/g, '<br><br>');
text = text.replace(/(\r?\n)/g, '<br>');

पहली पंक्ति: \nOR के लिए खोजें \r\nजहां उनमें से कम से कम 2 एक पंक्ति में हैं, उदाहरण के लिए \n\n\n\n। फिर इसे 2 से बदलेंbr

दूसरी पंक्ति: सभी एकल के लिए खोजें \r\nया \nउन्हें बदलें<br>


1

यदि आप PHP से चर भेजते हैं, तो आप भेजने से पहले इसे प्राप्त कर सकते हैं:

$string=nl2br($string);

0

यह ब्रेक के साथ सभी नई लाइन को बदल देगा

str = str.replace(/\n/g, '<br>')

यदि आप सभी नई लाइन को सिंगल ब्रेक लाइन से बदलना चाहते हैं

str = str.replace(/\n*\n/g, '<br>')

रेगेक्स के बारे में अधिक पढ़ें: https://dl.icewarp.com/online_help/203030104.htm यह आपको हर बार मदद करेगा।


str = str.replace(/\n+/g, '<br>')दूसरे मामले के लिए इस तरह से रेगेक्स का उपयोग करना भी संभव है
मैटेओ बैसो

0

विशिष्ट प्रश्न का उत्तर नहीं दे रहा है, लेकिन मुझे यकीन है कि यह किसी की मदद करेगा ...

यदि आपके पास PHP से आउटपुट है जिसे आप जावास्क्रिप्ट का उपयोग करके एक वेब पेज पर प्रस्तुत करना चाहते हैं (शायद एक अजाक्स अनुरोध का परिणाम), और आप केवल सफेद स्थान और लाइन ब्रेक को बनाए रखना चाहते हैं, तो <pre></pre>ब्लॉक के अंदर पाठ को संलग्न करने पर विचार करें :

var text_with_line_breaks = retrieve_some_text_from_php();
var element = document.querySelectorAll('#output');
element.innerHTML = '<pre>' + text_with_line_breaks + '</pre>';

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