2011-12-20 5 views
7

एक ऐप जिस पर मैं काम कर रहा हूं, उपयोगकर्ता ने सादे टेक्स्ट में सामग्री दर्ज की है जिसे बाद में HTML के रूप में प्रदर्शित किया जाएगा। के रूप में अच्छी तरह से संभव के रूप में उपयोगकर्ता की सामग्री प्रदर्शन बनाने के लिए हम इस प्रकार की सामग्री को बदलने: दो या अधिक नए लाइन वर्ण से सीमांकित पाठ केअनुच्छेद/बीआर एचटीएमएल टैग में नई लाइनों को परिवर्तित करना, क्या यह एक एकल रेगेक्स हो सकता है?

  • किसी भी ब्लॉक < पी > टैग में लिपटे रहे हैं। नए रेखा वर्ण (और बीच में किसी भी सफेद जगह) बाहर छीन लिया जाता है।

  • कोई भी एकल लाइन वर्ण (आसपास के व्हाइटस्पेस के साथ) को < br/> टैग द्वारा प्रतिस्थापित किया गया है।

मैं वर्तमान में दो regex प्रतिस्थापन के माध्यम से पाठ रख कर इसे प्राप्त करने रहा हूँ, लेकिन अगर यह संभवतः एक के लिए समेकित किया जा सकता है सोच रहा था। यहां मेरे पास अभी है (जावास्क्रिप्ट):

// content holds the text to process 
content = '<p>' + content.replace(/\n([ \t]*\n)+/g, '</p><p>') 
       .replace(/\n/g, '<br />') + '</p>'; 
+0

बस उत्सुक है, क्या आप किसी भी तरह के एचटीएमएल/जावास्क्रिप्ट संपादक का उपयोग कर रहे हैं जैसे कि TinyMCE या YUI? या सिर्फ एक फॉर्म/textarea तत्व? – Dave

+0

बस एक सादा पुराना रूप टेक्स्ट क्षेत्र –

+0

हैलो, क्या आप इसे हल करने में सक्षम थे? – Sisir

उत्तर

9

दो अलग-अलग प्रतिस्थापन तार हैं। तो इसे एकल प्रतिस्थापन कॉल में बनाना असंभव है।

लेकिन दूसरा प्रतिस्थापन() को अधिक प्रभावी सादा स्ट्रिंग प्रतिस्थापन में बदला जा सकता है।

content = '<p>' + content.replace(/\n([ \t]*\n)+/g, '</p><p>') 
       .replace('\n', '<br />') + '</p>'; 

तो, एकल regexp है। :)

अद्यतन

जावास्क्रिप्ट मुझे bluffed। स्ट्रिंग replace केवल पहली घटना को संभालती है।

देखें How to replace all occurrences of a string in JavaScript?

वहाँ भी replaceAll के कई संभावित समाधान, कार्यान्वयन दिया जाता है।

+1

इस समाधान के साथ समस्या यह है कि दूसरा प्रतिस्थापन कॉल केवल पहले मैच को प्रतिस्थापित करता है, न कि सभी मैचों। आपको सभी * शेष * नई * पकड़ने के लिए '.replace (/ \ n/g, '
') की आवश्यकता है। –

+0

मैं सही खड़ा हूँ। धन्यवाद। उत्तर अपडेट किया गया। – Vadzim

1

मुझे जावास्क्रिप्ट (थीम अनुकूलक में उपयोग के लिए) में wpautop कार्यक्षमता की नकल करने के लिए एक समान आवश्यकता का सामना करना पड़ रहा था।

तो यहाँ समस्या के लिए मेरे दृष्टिकोण है:

सबसे पहले, जब दो पंक्ति विराम हैं मामले की जगह।

to = to.replace(/\n{2}/g, '&nbsp;</p><p>'); 

फिर, मामले को प्रतिस्थापित करें जब केवल एक पंक्ति ब्रेक शेष हों।

to = to.replace(/\n/g, '&nbsp;<br />'); 

और अंत में एक < पी > टैग

to = '<p>' + to + '</p>'; 

मैं & nbsp इस्तेमाल किया में पूरी सामग्री लपेट; क्योंकि मेरे स्टाइल अनुच्छेद के बाद मार्जिन निहित है। यदि आपको उनकी आवश्यकता नहीं है तो आप उन्हें छोड़ सकते हैं। इसके अलावा, एक दोष यह है कि अगले पैराग्राफ की शुरुआत में सिंगल लाइन ब्रेक डाले जाते हैं, लेकिन यह ऐसा कुछ है जिसके साथ मैं रह सकता हूं।

संबंधित मुद्दे

 संबंधित मुद्दे