בודק Regex ל-JavaScript

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

רץ בדפדפן שלכםבלי הרשמהשום דבר לא מועלה

התאמות מודגשות

    
השתמשו ב-$1, ‏$<name>, ‏$& (ההתאמה כולה)
פרטי ההתאמות
#אינדקסהתאמהקבוצות
דף עזר ל-Regex
.כל תו מלבד ירידת שורה (כל תו עם s)
\d \w \sספרה, תו מילה, רווח לבן
\D \W \Sלא ספרה, לא תו מילה, לא רווח לבן
[abc] [^abc]אחד מ- / אף אחד מ- a, b, c
[a-z0-9]טווח תווים
\p{L} \p{N}אות / מספר Unicode (דורש u)
^ $תחילת / סוף הקלט (של השורה עם m)
\b \Bגבול מילה / לא גבול
* + ?0 או יותר, 1 או יותר, 0 או 1
{n} {n,} {n,m}בדיוק n, לפחות n, בין n ל-m
*? +? ??עצל (כמה שפחות)
a|ba או b
(…)קבוצת לכידה, מופנית כ-$1
(?<name>…)קבוצה בעלת שם, $<name>
(?:…)קבוצה שאינה לוכדת
\1 \k<name>הפניה לאחור
(?=…) (?!…)Lookahead / lookahead שלילי
(?<=…) (?<!…)Lookbehind / lookbehind שלילי
\. \* \\תווים מילוליים עם escape
\n \t \rירידת שורה, טאב, carriage return
\uFFFFCode unit של Unicode
\u{1F600}Code point (דורש u)
$&ההתאמה כולה במחרוזת החלפה
$` $'הטקסט לפני / אחרי ההתאמה

איך משתמשים בכלי בודק Regex

  1. הזינו את התבנית בין הלוכסנים, בלי ה-/ שמסביב.
  2. הפעילו או כבו דגלים כמו g (כל ההתאמות), i (התעלמות מרישיות) ו-m (ריבוי שורות).
  3. הדביקו את טקסט הבדיקה. ההתאמות מודגשות בתצוגת ההתאמות ומופיעות ברשימה למטה עם האינדקס וקבוצות הלכידה שלהן.
  4. סמנו החלפה והזינו מחרוזת החלפה כמו $1 או $<name> כדי לראות תצוגה מקדימה של String.replace.
  5. בחרו תבנית מספריית התבניות כדי להתחיל מ-regex בדוק לאימייל, URL,‏ IP או תאריך.

ביטויים רגולריים ב-JavaScript

הבודק משתמש במנוע ה-RegExp של הדפדפן שלכם, כך שהתוצאות זהות בדיוק למה ש-String.match, matchAll, replace ו-RegExp.exec מחזירים ב-JavaScript וב-Node.js. זה כולל תחביר מודרני: קבוצות בעלות שם (?<name>…), ‏lookbehind‏ (?<=…), ‏Unicode property escapes כמו \p{L} עם הדגל u, ואינדקסים של התאמות עם הדגל d.

מה עושים הדגלים

דגלשםהשפעה
gglobalמוצא כל התאמה במקום לעצור בראשונה.
iignoreCaseאותיות מתאימות בלי קשר לרישיות.
mmultiline^ ו-$ מתאימים בתחילת ובסוף כל שורה.
sdotAll. מתאים גם לשבירות שורה.
uunicodeמתייחס לתבנית כאל code points; מאפשר \p{…} ו-\u{…}.
ystickyמתאים רק במיקום הנוכחי של lastIndex.
dhasIndicesמדווח על מיקומי ההתחלה והסוף של כל קבוצת לכידה.

הגנה מפני 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 בתוך הדפדפן שלכם. התבנית והטקסט נשמרים רק בדפדפן שלכם, כדי שיחכו לכם כשתחזרו.

כלים קשורים