REGEX - איך מחפשים תו שנמצא לא בתחילת או סיום המחרוזת?
-
הם כן. אלא שלא ידעתי שהנושא הוא לא איתור התו אלא מחיקתו ע"י replace.
אפשר להשתמש עם פונקצייה בארגומנט השני ואז הביטוי השני מצויין, אם אתה שם קבוצות מסביב לסוגריים המרובעות.
ואכן הדרך היותר נכונה במקרה זה היא שימוש בNegative Lookbehind זה מאפשר לעשות שלילה בלי לכלול את מיקום השלילה בביטוי.(?<!^).(?<!$)
-
@dovid
יש לי כמה שאלות.+(.).+ [^$].[^^]
את הפקודה אני די מבין, חפש כל תו שיש לפניו ולאחריו תו (+ = לפחות מופע אחד, . = כל תו)
לא מבין אבל 1) מדוע'ababacbabab'.replace((.+)(a)(.+)/g, '$1')
לא תקין 2) מדוע באמצע יש גם נקודה (= כל תו) 3) על איזה פונקצית איתור כתבת שכן עובד?לגבי השורה השניה, 1) קודם כל הסדר נראה לי הפוך, סימון $ אומר סוף המחרוזת, מדוע פה הוא בתחילת החיפוש? 2) מדוע הפונקציה הזו
'ababacbabab'.replace([^$].[^^]/g, '')
מוציאה שגיאה?אפשר להשתמש עם פונקצייה בארגומנט השני ואז הביטוי השני מצויין, אם אתה שם קבוצות מסביב לסוגריים המרובעות.
אשמח מאוד לדוגמא.
(?<!^).(?<!$)
מבין את הסוגריים הראשונים שבודקים אם יש תחילת מחרוזת לפני התו, אבל הסגוריים השניים מחפשים סוף מחרוזת לפני התו??
המון תודה!!
-
שאלה נוספת
אפשר בחיפוש אחד לחפש תווים מסוימים בלי התניה ותווים אחרים עם התנית לא ראשונים או אחרונים?עריכה: כך
'dababacdbababc'.replace(/(cd|(?<!^)a(?<!$))/g, '')
לא טוב לי, אני רוצה שאת a יחפש אחרי שהוא מוחק את cd
כלומר שבכזה מקרה ה-a לפני האחרון לא ימחק כיון ש-c עתיד להימחק.'dababacdbababac'.replace(/(cd|(?<!^)a(?<!$))/g, '')
גם א"ז אפשר להכליל לחיפוש אחד?
-
מידי הרבה שאלות...
.+(.).+ [^$].[^^]
את הפקודה אני די מבין, חפש כל תו שיש לפניו ולאחריו תו (+ = לפחות מופע אחד, . = כל תו)
לא מבין אבל 1) מדוע'ababacbabab'.replace((.+)(a)(.+)/g, '$1')
לא תקין 2) מדוע באמצע יש גם נקודה (= כל תו) 3) על איזה פונקצית איתור כתבת שכן עובד?-
זה עובד, אבל שים לב שהביטוי .+(.).+ מחזיר רק תוצאה אחת גם הוא גלובלי, אם תעמיק תבין מייד למה. עדיין היה מותר לי להציע לך את זה כפתרון - זה עדיין עונה על הקירטריון של "מוצא תו שלא בתחילת וסיום המחרוזת" אבל לא עונה "מוצא כל תו" שכזה.
-
לא הבנתי מה השאלה. אני לא ידעתי איזה תו אתה רוצה, שמתי נקודה למצוא איזה שלא יהיה.
-
למשל
var valid = /.+@.+/.test(userInput)
זה מוודא לך שיש לפחות שטרודל אחד באמצע המחרוזת. וזה אומר שזה כתובת anydesk תקפה
לגבי השורה השניה, 1) קודם כל הסדר נראה לי הפוך, סימון $ אומר סוף המחרוזת, מדוע פה הוא בתחילת החיפוש? 2) מדוע הפונקציה הזו
'ababacbabab'.replace([^$].[^^]/g, '')
מוציאה שגיאה?- אכן... ט.ל.ח.
- כי חסר בה לוכסן פותח.
לגבי חלק תוים עם התנייה וחלק לא, אני לא מרוכז כעת. אולי מחר אבדוק את זה, לילה טוב!
-
-
מדוע
'adcdefghijk'.match(/[^^][a-z]+[^$]/g)
מחזיר את כל המחרוזת ולא למעט תו ראשון ואחרון?
מדוע
'ababacbabab'.replace(/[^^]a[^$]/g, '')
מוחק הכל למעט את 2 התווים האחרונים והראשונים?
לגבי חלק תוים עם התנייה וחלק לא, אני לא מרוכז כעת. אולי מחר אבדוק את זה, לילה טוב!
אשמח!
כמה דברים ששמתי לב
היתה עוד טעות בתחביר'adcdefghijk'.match(/(?<!^)[a-z]+(?<!$)/g)
הזוית השניה מיותרת, צ"ל
'adcdefghijk'.match(/(?<!^)[a-z]+(?!$)/g)
אמנם זה הביא אותה תוצאה, אבל הוא לא 'מצא' את התו האחרון בפני שהתו הזה עם תנאי "אין לפניו סוף מחרוזת"..
אבל מחיקת ה-< בהתניה לפני התו, התנאי לא יחול על התו שלפני אלא על החיפוש
` hello ignoreme hello123 ignoreme2 `.match(/^(?!ignoreme|ignoreme2|ignoremeN)([a-z0-9]+)$/gm) // ["hello", "hello123"]
אבל אני לא מבין
'abcd'.match(/!(?!abcd)[a-z]+$/g) \\ null - מובן 'abcg'.match(/!(?!abcd)[a-z]+$/g) \\ \\ null - מדוע, הלא התוצאה לא שווה לשלילה?
-
מדוע א. כי מה שכתבתי [^$] זה פשוט שטויות: https://stackoverflow.com/a/15669590/1271037, זה מפורש ליטרלית כתו דולר ולא כסוף שורה וכן ^. מעניין - היה לי תחושה שבדקתי אבל כנראה זו טעות. למה זה ככה? לא יודע.
מדוע ב. מאותו טעם...
זוית מיותרת: נכון! ...
לא מבין: אתה המצאת את ה
!
, אין כזה מושג בREGEX.