Menu

בודק Regex

לבדוק ביטויים רגולריים עם הדגשת התאמות מונפשת.

מאת Nethanel Bar, Co-founder & CEO

עודכן לאחרונה

מוכנים ללמוד תכנות באמת?

ב-Coddy לומדים דרך כתיבת קוד אמיתי בדפדפן: שיעורים אינטראקטיביים, משוב מיידי ועזרה מ-AI כשנתקעים.

מה זה regex tester?

Regex tester מאפשר לכתוב ביטוי רגולרי ולראות מיד למה הוא מתאים בטקסט לדוגמה. מפתחים משתמשים ב-regex (ביטויים רגולריים) כדי לאמת קלט, לחלץ נתונים ממחרוזות, לחפש בלוגים, לנקות טקסט, לבנות פקודות בעורך ולכתוב כללי חיפוש והחלפה.

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

שפות תכנות שונות משתמשות במנועי regex שונים מעט זה מזה (JavaScript, PCRE, Python, Java, Go, .NET). היסודות, כלומר תווים, מחלקות תווים, כמתים, עוגנים וקבוצות, עובדים בכל מקום. היכולות המתקדמות (lookbehind, קבוצות עם שם, כמתים פוססיביים) הן המקום שבו המנועים נפרדים.

מה תלמדו תוך כדי בדיקת regex

  • תבנית מתארת את *הצורה* של טקסט, לא את המשמעות שלו. \d+ מתאים לרצף ספרות, אבל לא יודע אם המספר הגיוני.
  • Flags משנים את ההתנהגות: g מוצא את כל ההתאמות, i מתעלם מאותיות גדולות וקטנות, m גורם ל-^ ול-$ להתאים לתחילת שורה ולסופה, ו-s מאפשר ל-. להתאים גם לירידת שורה.
  • קבוצות לכידה (...) מחלצות חלקים מהתאמה, ולא רק בודקות אם כל המחרוזת מתאימה. הן חיוניות לפענוח (parsing).
  • כמתים הם *חמדנים* (greedy) כברירת מחדל: הם מתאימים כמה שיותר. הוספת ? הופכת אותם ל*עצלים* (lazy): הם מתאימים כמה שפחות.

איך משתמשים ב-regex tester, שלב אחר שלב

  1. כתבו את התבנית

    הזינו ביטוי רגולרי בשדה התבנית. אל תכללו את הלוכסנים / שמסביב: הם תחביר ליטרל של JavaScript, לא חלק מהתבנית עצמה.

  2. הפעילו את ה-flags הדרושים

    ברוב המקרים תרצו g (מציאת כל ההתאמות) ו-i (בלי הבחנה בין אותיות גדולות לקטנות). השתמשו ב-m לעוגנים לפי שורה וב-s כדי ש-. יתאים גם לירידת שורה.

  3. הדביקו את טקסט הבדיקה

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

  4. קראו את חלונית ההתאמות

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

  5. שפרו עד שזה נכון

    הדקו כמתים, הוסיפו עוגנים (^, $) או בצעו escape לתווים ליטרליים (\., \?) עד שההתאמות והקבוצות הן בדיוק מה שהקוד שלכם צריך.

דף עזר ל-regex

ה-80% של regex שתשתמשו בהם 99% מהזמן. שמרו את הדף במועדפים: זו הדרך המהירה ביותר לזכור את התחביר. לדקדוק המלא, עיינו במדריך הביטויים הרגולריים של MDN.

סימןמשמעותדוגמה
.כל תו בודד (חוץ מירידת שורה)a.c מתאים ל-abc, a-c
\d \Dספרה / לא ספרה\d+ מתאים ל-123
\w \Wתו מילה (אות/ספרה/_) / לא תו מילה\w+ מתאים ל-hello_1
\s \Sרווח לבן / לא רווח לבן\s+ מתאים לרווחים ולטאבים
[abc]אחד מ-a, b או c[aeiou] מתאים לתנועה
[^abc]אף אחד מ-a, b או c[^0-9] מתאים לתווים שאינם ספרות
* + ?0 או יותר, 1 או יותר, 0 או 1 מהקודםa+ מתאים ל-a, aaa
{n} {n,m}בדיוק n / בין n ל-m\d{3,5} בין 3 ל-5 ספרות
^ $תחילת / סוף מחרוזת (או שורה עם m)^Error שורה שמתחילה ב-Error
(...)קבוצת לכידה(\d+) לוכד את הספרות
(?:...)קבוצה ללא לכידה(?:foo|bar) קיבוץ בלי לכידה
a|bחלופה: a או byes|no
\bגבול מילה\bcat\b מתאים ל-cat ולא ל-cats

דוגמאות regex לנסות

זיהוי הצורה הבסיסית של כתובת email

תבנית
^[\w.+-]+@[\w-]+\.[\w.-]+$
טקסט

learner@coddy.tech

התבנית תופסת את הצורה הבסיסית something@something.something. אימות email בעולם האמיתי מתירני הרבה יותר מזה: בטפסים עדיף להשתמש ב-type="email" ובבדיקה בצד השרת.

חילוץ כל המספרים ממשפט

תבנית
\d+
טקסט

Lesson 12 has 3 tasks and 2 quizzes.

עם ה-flag g, התבנית מוצאת כל רצף ספרות: 12, 3, 2. \d+ הוא המקבילה ב-regex ל"ספרה אחת או יותר".

שליפת מזהה מתוך URL בעזרת קבוצת לכידה

תבנית
/users/(\d+)
טקסט

/users/42/profile

ההתאמה המלאה היא /users/42, וקבוצת הלכידה (\d+) מחלצת רק את 42. קבוצות לכידה הן הדרך *להשתמש* בפועל בהתאמת regex בתוך הקוד.

כמתים חמדנים מול עצלים

חמדן
<.+>
עצל
<.+?>
טקסט

<b>hello</b>

הגרסה החמדנית מתאימה לכל המחרוזת <b>hello</b>, כי .+ תופס כמה שיותר. הגרסה העצלה (+?) עוצרת ב-> הראשון, ולכן מתאימה רק ל-<b> ול-</b>.

טעויות נפוצות ב-regex

  • שוכחים לבצע escape לתווים מיוחדים: ., ?, +, (, ), [, ], {, }, \, ^, $, |. כשרוצים אותם כפשוטם, מוסיפים לפניהם \.
  • כותבים תבנית שעובדת על דוגמה אחת אבל נכשלת בקלט אמיתי עם רווחים מיותרים, ירידות שורה או שדות חסרים.
  • משתמשים ב-.* חמדן ומתאימים הרבה יותר ממה שהתכוונו. עברו ל-.*? או למחלקת תווים ספציפית יותר.
  • מנסים לפענח עם regex פורמטים מקוננים לעומק (HTML מלא, שפות תכנות מורכבות, סוגריים מאוזנים). במקרים כאלה השתמשו ב-parser אמיתי.
  • שוכחים את ה-flag g ותוהים למה רק ההתאמה הראשונה מודגשת.

שאלות נפוצות על regex

מה זה regex?
Regex הוא קיצור של *regular expression* (ביטוי רגולרי): שפת תבניות תמציתית להתאמת טקסט. אותו רעיון קיים כמעט בכל שפת תכנות ובהרבה עורכים וכלי שורת פקודה.
איך כותבים regex?
מתחילים מהתווים הליטרליים שרוצים למצוא, ואז מחליפים את החלקים המשתנים במחלקות תווים (\d, \w, [abc]) ובכמתים (*, +, ?, {n,m}). השתמשו ב-regex tester כדי לשפר שוב ושוב עד שהתבנית מתאימה בדיוק למקרים שאתם רוצים.
מה המשמעות של \w ב-regex?
\w מתאים לתו מילה: אות, ספרה או קו תחתון. \W הוא ההפך (כל תו שאינו תו מילה). הקבוצה המדויקת תלויה במנוע וב-flag של Unicode.
למה ה-regex שלי מתאים ליותר מדי טקסט?
כמתים הם חמדנים כברירת מחדל: .* מתאים לכמה שיותר. עברו לכמת עצל (.*?) או השתמשו במחלקת תווים ספציפית יותר כדי לעצור איפה שאתם רוצים.
האם regex של JavaScript זהה לכל regex אחר?
הבסיס זהה, אבל המנועים שונים. JavaScript, PCRE, re של Python, Java, Go ו-.NET תומכים כל אחד ב-flags וביכולות מתקדמות קצת שונות (תמיכה ב-lookbehind, קבוצות עם שם, כמתים פוססיביים).
האם כדאי למתחילים ללמוד regex?
כן, בהדרגה. התחילו מליטרלים, מחלקות תווים, כמתים, עוגנים, flags וקבוצות לכידה. את ה-lookarounds, הקבוצות עם שם וה-regex המותנה השאירו להמשך.

למידע נוסף

כלי פיתוח נוספים

איור של שפות התכנות ב-Coddy

ללמוד תכנות עם Coddy

להתחיל