בעקבות המדריך על regex
-
היה לי לפני תקופה אתגר מעניין
https://regex101.com/r/i6WDbA/5או תריצו בקונסול
var s = "Ahron" var r = /^(Ahr)(o?)([^n])/ console.log( s.match(r) )
להפתעתי גליתי שהתשובה חיובית
שבגלל שבקבוצה השלישית (מתוך 4) הוא החזיר תו ריק בשביל שהתו אחריו לא יהיה n!!הפתרון הוא לשלול את o שוב, כך?
var s = "Ahron" var r = /^(Ahr)(o?)([^on])/ console.log( s.match(r) )
ככל שאני זוכר יש הגדרה ברג'קס שחוסך א"ז, אבל הוא לא נתמ ב-js.
-
זה באמת שאלה מצויינת.
נראה לי שבזמנו שיתפת אותי, ןלמרות זאת, גם עכשיו לקח לי זמן להבין איך זה ייתכן.
בעצם אנחנו אומרים לו תמצא Ahr שאחריו ייתכן o, ואחרי כן אות כל שהיא מלבד n.
הרגקס לא מצליח למצוא התאמה במסלול של היתכנות הo, אז הוא בוחר למצוא את ההתאמה במקרה שאין o! ואז הo משמש עלה תאנה לתנאי הבא: אות כל שהיא שאיננה n = o...
בעצם הבעיה פה זה איך להכריח את הרגקס לכלול את הo במידה והיא קיימת.
הפיתרון של כלילת הo בשלילת הn, הוא לא מלא: לפעמים תסכים גם לo כאות אחרונה.
הבעיה פתירה ע"י חלוקת הרגקס לשתי תרחישים:Ahro[^n]|Ahr[^on]
אבל באמת זו עקיפה במידה מסוימת והבעיה עדיין מאתגרת.
. -
נסיתי די הרבה זמן להשוות א"ז לדוגמא האמיתית ולהבין מה עשיתי בסופו של דבר,
קשה, כי הם ארוכים ועם שימוש נרחב במשתנים.ככל הנראה ברוב המוחלט של המקרים הבאג דווקא היווה יתרון (יחי js ), כי מה שהיה חשוב זה אם יש בסוף n וזה משליך על האם להשאיר או למחוק את o, זה חסך חיפושים לתרחישים שונים.
--
אגב, לא סיפרת לנו מהו הדגל שמונע א"ז (לא ב-js).
אני אישית אשמח להסברים על הפונקציות השונות שנמצאים במופע רג'קס.
תודה!