/ / अंतिम टैग के लिए (पहले से ही एक स्ट्रिंग में) RegEx - जावास्क्रिप्ट, xml, regex

अंतिम टैग (पहले से ही एक स्ट्रिंग में) RegEx - जावास्क्रिप्ट, एक्सएमएल, regex

मुझे नहीं पता कि मैं क्या गलत कर रहा हूं। मेरे पास यह स्ट्रिंग है जिसे मैं बदलना चाहता हूं

<?xml version="1.0" encoding="utf-8" ?>
<Sections>
<Section>

मैं सब कुछ को बदलने के लिए regex का उपयोग कर रहा हूं <Section>, और बाकी अछूते छोड़ दें।

arrayValues[index].replace("/[([.,n,s])*<Section>]/", "---");

मेरे रेक्सक्स में क्या गलत है? क्या इसका मतलब यह नहीं है कि नई लाइन और रिक्त स्थान, सहित और सहित हर चरित्र को दोहराएं <Section> साथ में ---?

उत्तर:

जवाब के लिए 2 № 1

सबसे पहले, आपको उद्धरण हटाने की आवश्यकता हैआपके regex के आसपास — अगर वे "वहाँ हैं, तो तर्क" को regex के रूप में संसाधित नहीं किया जाएगा। जावास्क्रिप्ट इसे एक स्ट्रिंग के रूप में देखेगा (क्योंकि यह एक स्ट्रिंग है) और इसे शाब्दिक रूप से मिलान करने का प्रयास करें।

अब उस पर ध्यान दिया गया है, हम आपके regex को थोड़ा सरल कर सकते हैं:

arrayValues[index].replace(/[sS]*?<Section>/, "---");

[sS] जावास्क्रिप्ट के आसपास एक की कमी है s ध्वज (एक आसान विकल्प जो अधिकांश भाषाओं द्वारा समर्थित है जो सक्षम करता है . न्यूलाइन से मेल खाने के लिए)। s कर देता है मैच नईलाइन्स (बिना भी s ध्वज निर्दिष्ट), इसलिए वर्ण वर्ग [sS] मैच के लिए रेगेक्स इंजन बताता है:

  • s - एक व्हाट्सएप चरित्र, जो एक नई पंक्ति हो सकता है

या

  • S - ए गैर-व्हाट्सएप चरित्र

तो आप सोच सकते हैं [sS] मिलान के रूप में . (किसी भी वर्ण को छोड़कर) n (एक नई पंक्ति)। देख जावास्क्रिप्ट रेगेक्स मल्टीलाइन फ्लैग काम नहीं करता है अधिक जानकारी के लिए।


? का उपयोग प्रारंभिक बनाने के लिए किया जाता है [sS]* गैर-लालची से मेल खाते हैं, इसलिए रेगेक्स इंजन बंद हो जाएगा क्योंकि यह पहली घटना को हिट करता है <Section>.


जवाब के लिए 0 № 2
arrayValues[index].replace("/[([.,n,s])*<Section>]/", "---");

मेरे रेक्सक्स में क्या गलत है?

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

arrayValues[index].replace(/[Ss]*<Section>/, "---");

साथ ही, इसमें आपके बहुत सारे अनावश्यक चरित्र हैं। [] लगभग पूरी चीज एक चरित्र वर्ग का निर्माण करती है, जो आप नहीं चाहते हैं। कब्जा करने वाला समूह () सिर्फ एक वर्ण वर्ग को लपेटता है जिसे स्वयं दोहराया जा सकता है। और एक बिंदी . एक चरित्र वर्ग के अंदर सभी पात्रों के बजाय एक शाब्दिक बिंदु से मेल खाता है।