שיעורי מודול (3/4)
החלף בהתקשרות חוזרת
אם מחרוזת החלפה אינה מספיקה, העבר פונקציה:
str.replace(regex, (match, ...groups) => string). ההתקשרות חזרה מופעלת
עבור כל התאמה וערך ההחזר שלה הופך לתחליף.
'prezzi: 10 20 30'.replace(/\d+/g, (m) => Number(m) * 1.22);
// "prezzi: 12.2 24.4 36.6" (22% VAT)טיעוני Callback
str.replace(regex, (match, p1, p2, ..., offset, original, groups) => ...);match-- המשחק כולו.p1,p2, \u2026 -- הקבוצות שנתפסו לפי הסדר.offset-- אינדקס של ההתאמה במחרוזת המקורית.original-- כל המחרוזת.groups-- אובייקט עם הקבוצות הנקובות (אם יש).
'2024-03-15'.replace(/(\d{4})-(\d{2})-(\d{2})/, (_, a, m, g) => `${g}/${m}/${a}`);
// "15/03/2024"ההתקשרות חזרה מעניקה לך כוח שרירותי: ניתוח, חיפוש, המרה, HTML בורח מכל מה שמחרוזת סטטית לא יכולה לעשות.
ארגומנטים מתקדמים בהחלפת התקשרויות חוזרות
פונקציית ה-callback מקבלת מספר ארגומנטים: ההתאמה המלאה, כל קבוצה שנלכדה, היסט של ההתאמה בתוך הטקסט כולו, ומחרוזת הקלט המקורית. זה מאפשר לוגיקת טרנספורמציה מתוחכמת מבוססת הקשר.
נסה את זה
מצא כל מספר שלם בטקסט. (בהחלפה תעביר את `(m) => מספר(m) * 2` כדי להכפיל אותו.)
הצג רמז
השתמש ב-\\d+ (ספרה אחת או יותר) כדי ללכוד כל מספר שלם כהתאמה בודדת.
הפתרון זמין לאחר 3 ניסיונות
סקירת התרגיל
מצא כל אימייל (צורה פשוטה: אותיות/ספרות/נקודות/קו תחתון @ דומיין). בדרך זו התקשרות חוזרת יכולה לשנות אותו ל-`***@domain`.
הצג רמז
הרחב את המחלקה ל-[\\w.]+ כדי לקבל נקודות בשם המשתמש ובדומיין.
הפתרון זמין לאחר 3 ניסיונות
אתגר נוסף
Match every word consisting of letters in the text, so it can be transformed to uppercase via a callback.
הצג רמז
מצא אותיות פשוטות עם [a-zA-Z]+.
הפתרון זמין לאחר 3 ניסיונות