איך משתמשים בכלי בודק Regex
- הזינו את התבנית בין הלוכסנים, בלי ה-
/ שמסביב. - הפעילו או כבו דגלים כמו
g (כל ההתאמות), i (התעלמות מרישיות) ו-m (ריבוי שורות). - הדביקו את טקסט הבדיקה. ההתאמות מודגשות בתצוגת ההתאמות ומופיעות ברשימה למטה עם האינדקס וקבוצות הלכידה שלהן.
- סמנו החלפה והזינו מחרוזת החלפה כמו
$1 או $<name> כדי לראות תצוגה מקדימה של String.replace. - בחרו תבנית מספריית התבניות כדי להתחיל מ-regex בדוק לאימייל, URL, IP או תאריך.
ביטויים רגולריים ב-JavaScript
הבודק משתמש במנוע ה-RegExp של הדפדפן שלכם, כך שהתוצאות זהות בדיוק למה ש-String.match, matchAll, replace ו-RegExp.exec מחזירים ב-JavaScript וב-Node.js. זה כולל תחביר מודרני: קבוצות בעלות שם (?<name>…), lookbehind (?<=…), Unicode property escapes כמו \p{L} עם הדגל u, ואינדקסים של התאמות עם הדגל d.
מה עושים הדגלים
| דגל | שם | השפעה |
g | global | מוצא כל התאמה במקום לעצור בראשונה. |
i | ignoreCase | אותיות מתאימות בלי קשר לרישיות. |
m | multiline | ^ ו-$ מתאימים בתחילת ובסוף כל שורה. |
s | dotAll | . מתאים גם לשבירות שורה. |
u | unicode | מתייחס לתבנית כאל code points; מאפשר \p{…} ו-\u{…}. |
y | sticky | מתאים רק במיקום הנוכחי של lastIndex. |
d | hasIndices | מדווח על מיקומי ההתחלה והסוף של כל קבוצת לכידה. |
הגנה מפני catastrophic backtracking
תבניות עם כמתים מקוננים, כמו (a+)+$ או (\w|\d)*x, עלולות לרוץ בזמן אקספוננציאלי על קלטים שכמעט מתאימים. בדף אינטרנט רגיל זה מקפיא את הלשונית. כאן כל התאמה רצה ב-Web Worker ברקע שנעצר אחרי שנייה אחת, ותקבלו אזהרה ברורה במקום דפדפן תקוע. אותה תבנית בקוד פרודקשן עלולה להיות פגיעות ReDoS, אז התייחסו לאזהרה כאל באג שצריך לתקן.
טיפים לכתיבת regex טוב יותר
- עגנו תבניות עם
^ ו-$ כשאתם מאמתים ערכים שלמים, אחרת התאמה בכל מקום במחרוזת תעבור.
- העדיפו מחלקות ספציפיות כמו
[^"]* על פני .*; הן מהירות יותר ומונעות התאמת יתר.
- השתמשו בקבוצות שאינן לוכדות
(?:…) כשאינכם צריכים את הערך הנלכד.
- תנו שמות לקבוצות.
match.groups.year קריא יותר מ-match[1].
שאלות נפוצות
באיזה סוג regex הבודק משתמש?
JavaScript (ECMAScript), דרך ה-RegExp המובנה של הדפדפן. רוב התחביר משותף ל-PCRE, Python ו-Java, אבל תכונות כמו כמתים possessive, קבוצות אטומיות ומשני inline כמו (?i) לא זמינות ב-JavaScript.
למה התבנית שלי מוצאת רק התאמה אחת?
בלי הדגל g (global), JavaScript עוצר אחרי ההתאמה הראשונה. הפעילו את g כדי למצוא כל מופע.
איך מפנים לקבוצות במחרוזת ההחלפה?
השתמשו ב-$1, $2… לקבוצות ממוספרות, ב-$<name> לקבוצות בעלות שם, ב-$& להתאמה כולה וב-$$ לסימן דולר מילולי.
למה הבודק עצר עם timeout?
התבנית לקחה יותר משנייה על הקלט שלכם, וזה כמעט תמיד סימן ל-catastrophic backtracking. חפשו כמתים מקוננים כמו (x+)+ או חלופות חופפות כמו (a|a)*, ושכתבו אותם כך שכל תו יוכל להתאים רק בדרך אחת.
האם נתוני הבדיקה שלי נשלחים לאנשהו?
לא. ההתאמה רצה מקומית ב-Web Worker בתוך הדפדפן שלכם. התבנית והטקסט נשמרים רק בדפדפן שלכם, כדי שיחכו לכם כשתחזרו.