אובייקט `RegExp`

אובייקט `RegExp`

מאמר זה מסביר את האובייקט RegExp.

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

YouTube Video

אובייקט RegExp

מהו RegExp?

RegExp (ביטוי רגולרי) הוא אובייקט המשמש לייצוג תבניות של מחרוזות. בניגוד להשוואות תווים פשוטות, ניתן להגדיר בצורה גמישה 'מחרוזות שעונות על תנאים מסוימים.'.

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

1const pattern = /abc/;
  • הביטוי הרגולרי הזה בודק אם הרצף 'abc' נכלל.

כיצד ליצור ביטויים רגולריים (שתי שיטות)

ישנם שני סוגי תחביר ל-RegExp: כתיב מילולי ו-כתיב קונסטרקטור.

1// Literal notation: pattern and flags are written together
2const literal         = /hello/;
3const literalWithFlag = /hello/i;
4const literalDigits   = /\d+/;
5
6// Constructor notation: pattern and flags are passed separately
7const constructor         = new RegExp("hello");
8const constructorWithFlag = new RegExp("hello", "i");
9const constructorDigits   = new RegExp("\\d+");
  • הכתיבה הליטרלית תמציתית וקריאה, מה שהופך אותה למתאימה לביטויים רגולריים המשמשים כקבועים. מצד שני, כתיבת בנאי משמשת כאשר רוצים לבנות את התבנית באמצעות משתנים או לקבוע את התוכן שלה בזמן הריצה.
  • בכתיבה ליטרלית, ניתן לתאר בצורה אינטואיטיבית את הביטוי הרגולרי ואת הדגלים שלו יחד. בניגוד לכך, בכתיבת בנאי יש לציין את התבנית ואת הדגלים בנפרד.
  • בנוסף, בכתיבת הבנאי, יש להעביר את הביטוי הרגולרי כמחרוזת ולכן יש להוסיף תו חמק (backslash) פעמיים.

test(): האימות הבסיסי ביותר

אובייקט ה-RegExp מספק מתודות לביצוע הערכות ופעולות על בסיס ביטויים רגולריים. המתודה test() מחזירה ערך בוליאני המציין האם התבנית מתאימה.

1const regex = /JavaScript/;
2
3console.log(regex.test("I love JavaScript")); // true
4console.log(regex.test("I love TypeScript")); // false
  • זוהי המתודה הראשונה שכדאי ללמוד, והיא אידיאלית לבדיקות תנאי ולאימות קלט.

match(): קבלת תוצאות ההתאמה

המתודה match() מחזירה מערך המכיל את המחרוזת שתואמת ומידע מפורט נוסף.

1const text = "Version 1.2.3";
2const result = text.match(/\d+\.\d+\.\d+/);
3
4console.log(result[0]); // "1.2.3"
  • match() נוחה יותר מ-test() לתהליכי חילוץ וניתוח נתונים.

replace(): החלפה באמצעות ביטויים רגולריים

המתודה replace() ממירה את החלק התואם למחרוזת אחרת.

1const text = "Hello   World";
2const result = text.replace(/\s+/g, " ");
3
4console.log(result); // "Hello World"
  • ניתן להשתמש בו לעיצוב יומני רישום או לנרמול רווחים מיותרים במחרוזות.

יסודות הדגלים (g, i, m)

ניתן לציין 'דגלים' (flags) בביטויים רגולריים. דגלים הם אפשרויות שמגדירות כיצד ביטוי רגולרי מעבד מחרוזות לפי כללים מסוימים. גם עם אותה תבנית, התוצאות עשויות להשתנות בהתאם לדגלים שנבחרו.

1const text = "apple Apple APPLE";
2const regex = /apple/gi;        // or new RegExp("apple", "gi");
3
4console.log(text.match(regex)); // ["apple", "Apple", "APPLE"]
  • הדגל g (global) מבצע חיפוש על פני כל המחרוזת כולה.
  • הדגל i (ignore case) מתעלם מהבדלי אותיות גדולות/קטנות בעת ההתאמה.
1const multilineText = `apple
2banana
3apple`;
4
5const regexM = /^apple/gm;
6
7console.log(multilineText.match(regexM)); // ["apple", "apple"]
  • הדגל m (multiline) משמש לעיבוד מחרוזות מרובות-שורות על בסיס כל שורה בנפרד. באמצעותו, התווים ^ ו-$ פועלים לפי תחילת או סוף כל שורה, ולא של כל המחרוזת כולה.

מחלקות תווים: שילוב מספר אפשרויות

באמצעות סוגריים מרובעים [], ניתן להגדיר קבוצת תווים אפשריים למקום בודד.

1const regex = /gr[ae]y/;
2
3console.log(regex.test("gray")); // true
4console.log(regex.test("grey")); // true
  • דבר זה שימושי כדי לקבל איותים שונים או חלופות פשוטות.

מטא-תווים: קיצורי דרך נפוצים

מטה-תווים הם סמלים שמאפשרים לכתוב תבניות נפוצות בצורה מקוצרת.

1const regex = /\d{4}-\d{2}-\d{2}/;  // or new RegExp("\\d{4}-\\d{2}-\\d{2}");
2
3console.log(regex.test("2025-12-29")); // true
  • \d מסמל ספרה, ו-{n} מציין את מספר החזרות.

^ ו-$: אימות המחרוזת המלאה

^ ו-$ מציינים את תחילת וסיום המחרוזת.

1const regex = /^\d+$/;
2
3console.log(regex.test("123"));   // true
4console.log(regex.test("123a"));  // false
  • הם חשובים במצבים בהם נדרשת התאמה מדויקת, כמו שדות בטופס.

קיבוץ ולכידה

על ידי שימוש בסוגריים (), ניתן לחלץ ערכים חלקיים.

1const text = "2025/12/29";
2const regex = /(\d{4})\/(\d{2})\/(\d{2})/;
3const [, year, month, day] = text.match(regex);
4
5console.log(year, month, day); // 2025 12 29
  • זה משמש לעיתים קרובות לפירוק תאריכים ומחרוזות מבנה.

טעויות נפוצות ודגשים חשובים

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

1// Hard to read
2const regex = /^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+$/;
  • אם זה הופך להיות מסובך מדי, ניתן לשקול להוסיף הערות, לפצל את הביטויים, או לעדכן את התהליך עצמו.

סיכום

RegExp הוא תכונה בסיסית וחשובה ב-JavaScript לתיאור עיבוד מחרוזות בפשטות ובדיוק. אין צורך ללמוד ביטויים רגולריים מורכבים מההתחלה; חשוב להשתמש בשיטות ובתחביר בסיסיים כגון test, match ו-replace לפי הצורך המעשי שלך. אם תתייחס לביטויים רגולריים לא כ'ידע מיוחד' אלא ככלי לייצוג תבניות בצורה מסודרת, תוכל לשפר מאוד את איכות וקריאות האימותים ועיבוד הטקסט.

תוכלו לעקוב אחר המאמר שלמעלה באמצעות Visual Studio Code בערוץ היוטיוב שלנו. נא לבדוק גם את ערוץ היוטיוב.

YouTube Video