דילוג לתוכן המרכזי
מודול 7 · שיעור 3 מתוך 427/32 בקורס~12 min
שיעורי מודול (3/4)

החלף בהתקשרות חוזרת

אם מחרוזת החלפה אינה מספיקה, העבר פונקציה: str.replace(regex, (match, ...groups) => string). ההתקשרות חזרה מופעלת עבור כל התאמה וערך ההחזר שלה הופך לתחליף.

JS
'prezzi: 10 20 30'.replace(/\d+/g, (m) => Number(m) * 1.22);
// "prezzi: 12.2 24.4 36.6" (22% VAT)

טיעוני Callback

JS
str.replace(regex, (match, p1, p2, ..., offset, original, groups) => ...);
  • match -- המשחק כולו.
  • p1, p2, \u2026 -- הקבוצות שנתפסו לפי הסדר.
  • offset -- אינדקס של ההתאמה במחרוזת המקורית.
  • original -- כל המחרוזת.
  • groups -- אובייקט עם הקבוצות הנקובות (אם יש).
JS
'2024-03-15'.replace(/(\d{4})-(\d{2})-(\d{2})/, (_, a, m, g) => `${g}/${m}/${a}`);
// "15/03/2024"

ההתקשרות חזרה מעניקה לך כוח שרירותי: ניתוח, חיפוש, המרה, HTML בורח מכל מה שמחרוזת סטטית לא יכולה לעשות.

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

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

נסה את זה

פעילות גופנית#regex.m7.l3.e1
ניסיונות: 0טוען...

מצא כל מספר שלם בטקסט. (בהחלפה תעביר את `(m) => מספר(m) * 2` כדי להכפיל אותו.)

טוען עורך...
הצג רמז

השתמש ב-\\d+ (ספרה אחת או יותר) כדי ללכוד כל מספר שלם כהתאמה בודדת.

הפתרון זמין לאחר 3 ניסיונות

סקירת התרגיל

פעילות גופנית#regex.m7.l3.e2
ניסיונות: 0טוען...

מצא כל אימייל (צורה פשוטה: אותיות/ספרות/נקודות/קו תחתון @ דומיין). בדרך זו התקשרות חוזרת יכולה לשנות אותו ל-`***@domain`.

טוען עורך...
הצג רמז

הרחב את המחלקה ל-[\\w.]+ כדי לקבל נקודות בשם המשתמש ובדומיין.

הפתרון זמין לאחר 3 ניסיונות

אתגר נוסף

פעילות גופנית#regex.m7.l3.e3
ניסיונות: 0טוען...

Match every word consisting of letters in the text, so it can be transformed to uppercase via a callback.

טוען עורך...
הצג רמז

מצא אותיות פשוטות עם [a-zA-Z]+.

הפתרון זמין לאחר 3 ניסיונות