DanLevy.net

מאפס לגיבור רגקס

חילוץ וניתוח מחרוזות דמויות‑URL עם ביטוי רגולרי יחיד

תוכן עניינים

TL;DR: קפצו ישר לRegex של 120+ בתים.

🚀 מבוא

חילוץ כתובות URL מטקסט גולמי יכול לעיתים להרגיש כמו משחק משעמם של “הכה חור”. פיסוק, עטיפות בסוגריים, ועיצוב דו‑משמעי כולם מתנגשים ומקשים על העבודה. בין אם אתם בונים סקרייפר אינטרנט, מנתח נתונים, או אפליקציית צ’אט, חילוץ מדויק של URL הוא קריטי.

בפוסט הזה נתקוף את הבעיה ישירות עם גישה גמישה של שני שלבים. המטרה שלנו היא לתפוס תחילה את כל המחרוזות שיכולות להיראות כ‑URL ולאחר מכן לבצע אימות בתהליך נפרד.

💡 הערה: תבנית זו איננה מיועדת לאימות כתובות URL! היא מתוכננת להיות מרחיבה בכוונה עם פיסוק ואיות לקוי.

  1. תפוס כל מה שדומה ל‑URL: שגר רשת רחבה כדי ללכוד את כל המחרוזות שיכולות להיות URL. כאן ה‑“regex של 120+ בתים” שלנו מצטיין.
  2. אימות: אחרי שתופסים את המועמדים, השתמשו בבדיקות משניות (למשל, פתרון DNS, השוואה לדומיינים מוכרים) כדי להסיר ערכים שגויים.

המחשת האתגר

מונחים כמו extract ו‑parse משמשים לעיתים באופן חלופי, אך הם מתייחסים לתהליכים שונים. חילוץ URL כולל זיהוי ותפיסת כתובות פוטנציאליות מתוך טקסט רחב. פירוק, לעומת זאת, מתמקד בפירוק כתובות אלו לחלקים המרכיבים אותן.

כאשר אני מדבר על פירוק או על “חלקי URL”, אני מתכוון לרכיבים הבאים:

חמשת חלקי כל ה‑URL
URL anatomy, visualized

לחצו כדי לראות צילום מסך של התאמת תתי‑מחרוזת ב‑RegEx101.

לפני שנצלול עמוק לתוך ה‑regex, נשתמש בכלי חזותי כדי לראות כמה טוב הדפוס שלנו תופס התאמות רבות:

שימוש ב‑RegEx101.com להצגת התאמות מרובות שורות
Preview 'bulk' multi-line matches

ה‑Regex של 120+ בתים

להלן regex תמציתי שנועד לחלץ ולפענח URL ב‑צעד אחד. הוא תומך במגוון פרוטוקולים, דומיינים, נתיבים, ובחלקי שאילתה/פרגמנט אופציונליים.

אל תדאגו—נפרק את זה שלב אחרי שלב!

120+ Byte URL Regex
const urlRegex = /([-.a-z0-9]+:\/{1,3})([^-\/\.[\](|)\s?][^`\/\s\]?]+)([-_a-z0-9!@$%^&*()=+;/~\.]*)[?]?([^#\s`?]*)[#]?([^#\s'"`\.,!]*)/gi;
// Compatibility: ES5+
// Samepattern, split on newlines for readability:
([-.a-z0-9]+:\/{1,3})
([^-\/\.[\](|)\s?][^`\/\s\]?]+)
([-_a-z0-9!@$%^&*()=+;/~\.]*)
[?]?([^#\s`?]*)
[#]?([^#\s'"`\.,!]*)
שתפו את ה‑regex הכי פראיים שנתקלים בהם (או שכתבתם) בתגובות להלן! 🚀

🧩 פירוק שלב‑אחר‑שלב

בואו ננתח את ה‑regex רכיב‑רכיב כדי להבין איך הוא פועל:

1. פרוטוקול (קבוצה 1): ([-.a-z0-9]+:/{1,3})

2. דומיין (קבוצה 2): ([^-/.[](|)s?][^`/s]?]+)

3. נתיב (קבוצה 3): ([-_a-z0-9!@$%^&*()=+;/~\.]*)

4. מחרוזת שאילתה (קבוצה 4): [?]?([^#\s`?]*)

5. מקטע (קבוצה 5): [#]?([^#\s’”`.,!]*)

🛠️ דוגמת ניתוח

כך אפשר להפעיל את הרגקס המפחיד הזה, עם מעט קוד JavaScript:

☑️ צעדים הבאים

בהתאם למקרה השימוש שלכם, ייתכן שיהיה צורך לחדד את הרגקס הזה או להוסיף שלבי אימות ועיבוד נוספים.

פרויקטים שונים, צרכים שונים

לפרויקטים יש דרישות שונות וחששות בטחוניים:

  1. סריקת אינטרנט: אימות כתובות URL כדי לוודא שהן נגישות ואמינות.
  2. עיבוד נתונים: חילוץ כתובות URL מתוכן שנוצר על‑ידי משתמשים תוך שמירה על בטיחות.
  3. ניתוח נתונים: סינון קישורים משוכפלים או לא רלוונטיים למטרות מחקר או שיווק.
  4. יישומים למשתמשים: הוספת קישורים אוטומטית ל‑URL בצ’אט או בפורומים.

עיבוד נוסף ואימות

לאחר איסוף כתובות URL פוטנציאליות, יש לבצע בדיקות נוספות:

📝 סיכום

חילוץ נתוני מחרוזת חצי‑מבנה עשוי להיות החלק המספק ביותר במיומנות הרגקס.

הנה סיכום של הנקודות המרכזיות:

על‑ידי ביצוע הצעדים האלה, תוכלו לחלץ ביעילות כל מחרוזת חצי‑מובנית, ולבסס את הבסיס לעיבוד ולאימות נוספים.

📚 למידה נוספת