DanLevy.net

शून्य से रेगेक्स हीरो तक

एकल रेगेक्स से URL‑समान स्ट्रिंग्स निकालें और पार्स करें

सामग्री तालिका

TL;DR: सीधे 120+ बाइट रेगेक्स पर जाएँ।

🚀 परिचय

कच्चे पाठ से URL निकालना कभी‑कभी व्हैक‑ए‑मोल खेलते‑जैसा थकाऊ लग सकता है। विराम चिह्न, कोष्ठक में लिपटे भाग, और अस्पष्ट फ़ॉर्मेटिंग सभी मिलकर आपके प्रयासों को जटिल बना देते हैं। चाहे आप वेब स्क्रैपर, डेटा विश्लेषक, या चैट एप्लिकेशन बना रहे हों, URL को सटीक रूप से निकालना आवश्यक है।

इस पोस्ट में, हम इस समस्या को सीधे एक लचीले दो‑स्टेप दृष्टिकोण से निपटेंगे। हमारा लक्ष्य पहले सभी संभावित URL‑समान स्ट्रिंग्स को पकड़ना है, फिर वैधता को बाद की प्रक्रिया में संभालना।

💡 नोट: यह पैटर्न URL की वैधता जाँचने के लिए नहीं है! यह विराम चिह्न और गलत वर्तनी को जानबूझकर अनुमति देता है।

🔍 लक्ष्य: पाठ से URL निकालना

कच्चे पाठ से URL निकालते समय दो‑स्टेप दृष्टिकोण प्रभावी होता है:

  1. सभी URL‑समान चीज़ें पकड़ें: एक व्यापक जाल बुनें ताकि सभी स्ट्रिंग्स जो हो सकता है URL हों, पकड़ ली जाएँ। यही वह जगह है जहाँ हमारा “120 बाइट रेगेक्स” काम करता है।
  2. वैधता जाँचें: एक बार ये उम्मीदवार पकड़ लिए जाएँ, तो द्वितीयक जांच (जैसे DNS रिज़ॉल्यूशन, ज्ञात डोमेनों के खिलाफ तुलना) का उपयोग करके अमान्य प्रविष्टियों को हटाएँ।

Terms जैसेextract और parse अक्सर आपस में बदलकर उपयोग किए जाते हैं, लेकिन वे अलग प्रक्रियाओं को दर्शाते हैं। URL निकालना (extracting) का मतलब है बड़े टेक्स्ट ब्लॉक से संभावित URL को पहचानना और पकड़ना। पार्सिंग (parsing) का अर्थ है इन URLs को उनके घटक भागों में विभाजित करना।

जब मैं पार्सिंग या ‘URL भागों’ की बात करता हूँ, तो मैं निम्नलिखित घटकों की ओर इशारा कर रहा हूँ:

सभी URLs के 5 भाग
URL anatomy, visualized

RegEx101 के सबस्ट्रिंग मैचिंग का स्क्रीनशॉट देखें।

रेगेक्स में बहुत गहराई में जाने से पहले, चलिए एक विज़ुअल टूल से देखते हैं कि हमारा पैटर्न कितनी अच्छी तरह कई मैच पकड़ता है:

RegEx101.com का उपयोग करके मल्टी‑लाइन मैचों को विज़ुअलाइज़ करना
Preview 'bulk' multi-line matches

120+ बाइट रेगेक्स

नीचे एक संक्षिप्त रेगेक्स दिया गया है जो URLs को एक ही कदम में निकालने और पार्स करने के लिए बनाया गया है। यह विभिन्न प्रोटोकॉल, डोमेन्स, पाथ्स और वैकल्पिक क्वेरी/फ़्रैगमेंट सेक्शन को सपोर्ट करता है।

चिंता मत कीजिए—हम इसे चरण‑दर‑चरण तोड़‑फोड़ करेंगे!

120+ Byte URL Regex
const urlRegex = /([-.a-z0-9]+:\/{1,3})([^-\/\.[\](|)\s?][^`\/\s\]?]+)([-_a-z0-9!@$%^&*()=+;/~\.]*)[?]?([^#\s`?]*)[#]?([^#\s'"`\.,!]*)/gi;
// Compatibility: ES5+
// Same pattern, split on newlines for readability:
([-.a-z0-9]+:\/{1,3})
([^-\/\.[\](|)\s?][^`\/\s\]?]+)
([-_a-z0-9!@$%^&*()=+;/~\.]*)
[?]?([^#\s`?]*)
[#]?([^#\s'"`\.,!]*)
आपने अब तक जिन सबसे जंगली रेगेक्स (या खुद लिखे) देखे हैं, उन्हें नीचे कमेंट्स में साझा करें! 🚀

🧩 चरण‑दर‑चरण विश्लेषण

आइए रेगेक्स को उसके घटकों में तोड़‑कर देखें कि यह कैसे काम करता है:

1. प्रोटोकॉल (ग्रुप 1): ([-.a-z0-9]+:/{1,3})

2. डोमेन (ग्रुप 2): ([^-/.[](|)s?][^`/s]?]+)

3. पाथ (ग्रुप 3): ([-_a-z0-9!@$%^&*()=+;/~\.]*)

4. क्वेरी (ग्रुप 4): [?]?([^#\s`?]*)

5. फ्रैगमेंट (ग्रुप 5): [#]?([^#\s’”`.,!]*)

🛠️ Parsing Example

यहाँ बताया गया है कि आप इस विशाल रेगेक्स को जावास्क्रिप्ट के साथ कैसे उपयोग में ला सकते हैं:

☑️ अगले कदम

आपके उपयोग‑केस के आधार पर आपको इस रेगेक्स को और परिष्कृत करने या अतिरिक्त वैधता व पोस्ट‑प्रोसेसिंग चरण जोड़ने की आवश्यकता हो सकती है।

विभिन्न प्रोजेक्ट, विभिन्न आवश्यकताएँ

प्रोजेक्ट्स की आवश्यकताएँ और सुरक्षा चिंताएँ अलग‑अलग होती हैं:

  1. वेब स्क्रैपिंग: URLs की वैधता जाँचें ताकि यह सुनिश्चित हो सके कि वे पहुँच योग्य और भरोसेमंद हैं।
  2. डेटा प्रोसेसिंग: उपयोगकर्ता‑जनित सामग्री से URLs निकालें और साथ ही सुरक्षा सुनिश्चित करें।
  3. डेटा एनालिसिस: शोध या मार्केटिंग उद्देश्यों के लिए डुप्लिकेट या अप्रासंगिक लिंक फ़िल्टर करें।
  4. यूज़र‑फ़ेसिंग एप्लिकेशन: चैट ऐप्स या फ़ोरम में URLs को स्वचालित रूप से हाइपरलिंक बनाएं।

पोस्ट‑प्रोसेसिंग और वैधता

संभावित URLs एकत्र करने के बाद अतिरिक्त जाँचें लागू करें:

📝 सारांश

सेमी‑स्ट्रक्चर्ड स्ट्रिंग डेटा को निकालना शायद रेगेक्स में महारत हासिल करने का सबसे संतोषजनक हिस्सा हो सकता है।

यहाँ मुख्य बिंदुओं का सारांश है:

इन चरणों का पालन करके आप किसी भी अर्ध‑संरचित स्ट्रिंग डेटा को प्रभावी रूप से निकाल सकते हैं, जिससे आगे की प्रोसेसिंग और वैधता के लिए ठोस आधार बनता है।

📚 आगे का अध्ययन