אינטרנט ישראל
  • ראשי
  • אודות רן בר-זיק ואינטרנט ישראל
  • ערוץ טלגרם
  • מסטודון
  • התחברו אלי בטוויטר
  • התחברו אלי בלינקדאין
  • ספר ג'אווהסקריפט
  • ראשי
  • אודות רן בר-זיק ואינטרנט ישראל
  • ערוץ טלגרם
  • מסטודון
  • התחברו אלי בטוויטר
  • התחברו אלי בלינקדאין
  • ספר ג'אווהסקריפט
ראשי » מדריכים » ES20XX » ES2018 – ביטויי lookBehind ו-lookAhead בביטויים רגולריים

ES2018 – ביטויי lookBehind ו-lookAhead בביטויים רגולריים

רן בר-זיק אפריל 8, 2018 7:07 am אין תגובות

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

»ES2018 – לבחור שמות של קבוצות עם Regex
»ES2018 – שימוש ביוניקוד בביטויים רגולריים
כדאי תמיד להשאר מעודכנים! אם יש לכם טלגרם, בדקו את ערוץ הטלגרם של האתר שבו אני מעדכן על פוסטים חדשים 🙂 אם אתם רוצים ללמוד תכנות באופן מקיף ומסודר, הצטרפו לאלפי הלומדים בפרויקט "ללמוד ג'אווהסקריפט בעברית" שמלמד לתכנת בג'אווהסקריפט, ב-Node.js ובריאקט וגם מלמד על תרומה לקוד פתוח. גם ספרים דיגיטליים וגם ספרים מודפסים. בשיתוף הקריה האקדמית אונו ובתמיכת חברות מובילות כגון Wix, Outbrain, Elementor, Iron Source, Chegg, Really Good ועוד.

כפי שציינתיגם במאמר הקודם, ל-ES2018 יש כמה תוספות חשובות ביותר לתחום ה-regular expression (שזה, תאמינו או לא, נקרא ביטויים רגולריים) – שתי תוספות ממש חמודות נקראות lookBehind ו-lookAhead.

lookAhead בעצם תופס לי ביטוי רגולרי על פי מה שיש אחריו. מה זאת אומרת? נניח ואני רוצה שהמחרוזת תעבור כל עוד יש בה את המילה foo שיש אחריה מיד את המילה bar. אבל בלי לתפוס את ה-bar. איך אני אעשה את זה? עם הביטוי הזה:

const REGEX = /foo(?=bar)/

סוגריים עם סימן שאלה ואז שווה אומרים – ׳הדבר שבא אחרי מה שבא מקודם׳. במקרה שלנו foo בא קודם ו- bar בא אחר כך.

const REGEX = /foo(?=bar)/

const a = REGEX.test('foobar'); // true

const b = REGEX.test('fooba'); // false

עוד דוגמה? בוודאי שכן! הנה. בואו נניח שאני מקבל מספר טלפון ואני רוצה את הקידומת בלבד. להזכירכם, lookAhead לא תופס את מה שבא אחריו. אז אני יכול בקלות להשתמש בביטוי של כל מספר שיש אחריו ׳-׳. איך עושים את זה? בקלות! קודם כל הביטוי הרגולרי הוא:

+[0-9]
שזה אומר כל ספרה אחת ויותר
(-\=?)
שזה אומר שחייב שיהיה אחריו מקף. שימו לב שהמקף הוא אחרי \.

וכך זה נראה בחיים האמיתיים:

const REGEX = /[0-9]+(?=\-)/

const a = ('054-45757575').match(REGEX); // 054

וזה תפס את ה-054 בלבד. הייתי יכול להתמש בדרך אחרת – אבל בשביל לתפוס את הקידומת בלבד הייתי צריך להשתמש בקבוצות וכאן אני יכול להשתמש בביטוי רגולרי אחד ויחיד על מנת לתפוס משהו.

זהו lookBehind חיובי. כלומר אני חייב שזה יופיע אחרי הביטוי. אם אני רוצה, אני יכול להשתמש ב-lookBehind שלילי – כלומר הביטוי לא יתפוס אם הביטוי שאציין ב-lookBehind יופיע. איך עושים את זה? בקלות! במקום ה-׳=׳ משתמשים ב-׳!׳. זה הכל! הנה – תראו את הדוגמה של ה-foobar – איך אני הופך אותה. מעכשיו הביטוי הרגולרי לא יתפוס אם אחרי ה-foo יש bar.

const REGEX = /foo(?!bar)/

const a = REGEX.test('foobar'); // false

const b = REGEX.test('fooba'); // true

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

const REGEX = /\S+ (?!Cohen)/

const a = 'Haim Levi'.match(REGEX); //Haim

const b = 'Moshe Cohen'.match(REGEX); //Null

אם אתם רוצים להשתשעש – הנה ה-codepen.

See the Pen positive and negative lookAhead by Ran Bar-Zik (@barzik) on CodePen.

בדיוק כפי שיש לנו lookAhead שבוחן מה מתרחש מיד אחרי הביטוי שלנו (אבל תופס רק את הביטוי) יש לנו גם lookBehind שבודק מה קורה לפני הביטוי שלנו (אבל תופס רק את הביטוי. דוגמה? אני מקבל מחרוזת טקסט, אני לא רוצה את הקידומת אלא רק את המספר. איך עושים את זה? פשוט מאוד. אני יוצא מנקודת הנחה שאני רוצה את כל מה שיש לפניו מספר ומקף (כמו למשל -03 או -054). איך עושים את זה? בקלילות:

const REGEX_POSTIVE = /(?< =\-)\d+/

const c = '03-6382020'.match(REGEX_POSTIVE); //6382020

const d = '054-5555555'.match(REGEX_POSTIVE); //5555555

זה בדיוק כמו lookAhead אבל יש גם > לפני ה-=. זה הכל! ויש לנו גם negative lookbehind. למשל, כאן אני בודק אם יש מספר שלפניו אין הסימן דולר.

const REGEX_NEGATIVE = /(?< !$)\d/

const e = '$4'.match(REGEX_NEGATIVE); //false

const f = '₪4'.match(REGEX_NEGATIVE); // 4

איך זה עובד? פשוט. באמת שכן - הביטוי
!>?
הוא ה-lookbehind השלילי. מיד אחריו אני שם את הביטוי שאני לא רוצה שייכנס. במקרה הזה $. לא נשכח את ה-\ לפניו כי זה תו מיוחד ולהקיף את הכל בסוגריים. אחרי זה אני פשוט שם d\ שאומר מספר. זה הכל.

See the Pen positive and negative Lookbehind by Ran Bar-Zik (@barzik) on CodePen.

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

כדאי תמיד להשאר מעודכנים! אם יש לכם טלגרם, בדקו את ערוץ הטלגרם של האתר שבו אני מעדכן על פוסטים חדשים 🙂 אם אתם רוצים ללמוד תכנות באופן מקיף ומסודר, הצטרפו לאלפי הלומדים בפרויקט "ללמוד ג'אווהסקריפט בעברית" שמלמד לתכנת בג'אווהסקריפט, ב-Node.js ובריאקט וגם מלמד על תרומה לקוד פתוח. גם ספרים דיגיטליים וגם ספרים מודפסים. בשיתוף הקריה האקדמית אונו ובתמיכת חברות מובילות כגון Wix, Outbrain, Elementor, Iron Source, Chegg, Really Good ועוד.
ES2018

השארת תגובה

ביטול

ללמוד ג'אווהסקריפט בעברית

ללמוד לתכנת ג'אווהסקריפט בעברית שגייס יותר משלוש מאות אלף שקל ולמעלה מ-2000 תומכים - בואו ללמוד עכשיו איך לתכנת.

רשימת הנושאים
  • מדריכים
    • ריאקט
    • טייפסקריפט
    • ECMAScript 6
    • ES20XX
    • Node.js
    • Express
    • רספברי פיי
    • Babel
    • docker
    • MongoDB
    • Git
    • לימוד MySQL
    • SASS
    • jQuery
    • CSS3
    • HTML 5
    • SVN
    • LESS
  • פיתוח אינטרנט
    • פתרונות ומאמרים על פיתוח אינטרנט
    • jQuery Scripts
    • jQuery למתקדמים
    • יסודות בתכנות
    • נגישות אינטרנט
  • חדשות אינטרנט
  • מידע כללי על אינטרנט
    • רשת האינטרנט
    • בניית אתרי אינטרנט
  • rss logo

    לכל המאמרים

    לכל המאמרים שפורסמו באינטרנט ישראל משנת 2008 ועד עכשיו.
  • rss logo

    RSS Feed

    משתמשים בקורא RSS? אם כן, עקבו אחרי אינטרנט ישראל באמצעות פיד ה-RSS!
    מה זה RSS?
  • Twitter logo

    עקבו אחרי בטוויטר

    בחשבון הטוויטר שלי אני מפרסם עדכונים מהירים על חדשות בתחום התכנות והיזמות, התרעות על מצבי חירום ורכילות בוערת על תחום הווב.
    מה זה טוויטר?
  • facebook like image

    ערוץ הטלגרם של אינטרנט ישראל

    בערוץ הטלגרם של אינטרנט ישראל אני מפרסם את הפוסטים של באתר וכן עדכונים טכנולוגיים נוספים.
    מה זה טלגרם?
  • github logo

    הפרויקטים שלי בגיטהאב

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

כל הזכויות שמורות לרן בר-זיק ולאינטרנט ישראל | מדיניות הפרטיות של אתר אינטרנט ישראל | אתר אינטרנט ישראל נגיש לפי תקן WCAG 2.0 AA | הצהרת הנגישות של האתר | אבטחת מידע ודיווח על בעיית אבטחת מידע

גלילה לראש העמוד