אני מעוניין לבצע פעולות מסוימות של חרוזות שאני מקבל בעת חיפוש עם ביטוי רגולרי.
אני מדבר כרגע על JS, אבל לאו בדווקא.
למשל, הביטוי הבא:
/==([^=]+)==/g
ימצא מחרוזות מהמבנה ==1==, ==2==, ==3==, וכדומה. כאשר מה שנמצא בתוך הסוגריים זה קבוצה שאני יכול להתייחס אליה באמצעות $1.
למשל:
var str = "==1==, ==2==, ==3=="
srt.replace (/==([^=]+)==/g, "--$1--")
יחזיר לי את התוצאה:
"--1--, --2--, --3--"
במקרה הזה, הפונקציה ריפלייס יודעת לזהות שה$1 שבתוך המחרוזת שבפרמטר השני שלה, הוא בעצם משתנה שמכיל קבוצה מתוך הביטוי הרגולרי שנתתי לה בפרמטר הראשון. אגב, אין לי מושג איך ועל פי מה קורה הזיהוי הזה.
אבל מה קורה אם אני רוצה לבצע פעולה אחרת. אני לא רוצה לשנות את הטקסט שסביב הקבוצה (ה$1), אלא את הקבוצה עצמה. למשל, בדוגמה שלמעלה, אני רוצה להכפיל כל ספרה ב3.
ולכן מהמחרוזת:
"==1==, ==2==, ==3=="
אני רוצה לקבל:
"==3==, ==6==, ==9=="
לכאורה זה פשוט, אני רק צריך לעשות פונקציית הכפלה על ה$1, אבל כנראה שזה לא עובד כך. ברגע שאני עושה איזו פעולה על ה$1 הוא מפסיק להיות מזוהה כמשתנה של קבוצת התווים מתוך התוצאה הספציפית של הביטוי הרגולרי, ומזוהה בטקסט סתם.
למשל, במקרה הזה, ניסיתי:
var str = "==1==, ==2==, ==3=="
srt.replace (/==([^=]+)==/g, "$1"*3)
וזה לא פעל. כי הקוד פוענח כאילו אני מכפיל מחרוזת "$1" *3 ולא כאילו אני מכפיל משתנה בשם $1 המכיל בתוכו ספרה.
אני מניח שהתשובה פשוטה, למי שמבין כיצד עובד הזיהוי של תוצאת החיפוש הרגולרי, כלומר לא לי.
תודה ושבוע טוב