רג'קס - איך לזהות חזרה על אותו תו?
-
אני מנסה ללכוד שאם אותו תו (במקרה הזה זה אותה אות בעברית) חוזרת על עצמה יותר מ-3 פעמים, להסיר את כל החזרות הנוספות מעבר ל3 הפעמים.
עשיתי משהו כזה https://regex101.com/r/pqKLb0/1
אבל זה מזהה כל 3 אותיות ברצף, לאו דווקא אם אותה אות חוזרת על עצמה...
אשמח לעזרה..
תודה! -
string.replace(/([A-Z])(\1{2})\1+/g,'$1$2')
הסבר בקצרה:
בחירה
([א-ת])
הכנס תו בטווח של א-ת לתוך קבוצה$1
({2}1\)
הכנס תווים הזהים לתו מהקבוצה הראשונה לתוך קבוצה$2
, אם מופיעים פעמיים נוספות+1\
בחר את שאר ההופעות של התו מהקבוצה הראשונה
החלפה
$1$2
החלף את המחרוזת שנבחרה עם הקבוצה הראשונה והשנייה
-
אני מפשט את התשובה של @רפאל (שיהיה קל להבין)
string.replace(/([A-Z])\1\1\1+/g, '$1$1$1')
הקוד של רפאל אלגנטי וגנרי יותר, כי יש גמישות לשינוי מספר החזרות ומקום אחד בלבד לעדכן בקוד.
אגב אפשר להתייחס לקבוצה של האות לפי שם, ואז יחד עם הפתרון של רפאל אנו יכולים לעטוף קבוצות נוספות (בלי חשבון איפה אוחזים) זה נראה ככה:
string.replace(/((?<ot>[A-Z])\k<ot>{2})\k<ot>+/g, '$1')