דילוג לתוכן
  • דף הבית
  • קטגוריות
  • פוסטים אחרונים
  • משתמשים
  • חיפוש
  • חוקי הפורום
כיווץ
תחומים

תחומים - פורום חרדי מקצועי

💡 רוצה לזכור קריאת שמע בזמן? לחץ כאן!
  1. דף הבית
  2. תכנות
  3. ארכיון code613m
  4. שאלה ב-regex ב-js

שאלה ב-regex ב-js

מתוזמן נעוץ נעול הועבר ארכיון code613m
3 פוסטים 2 כותבים 264 צפיות
  • מהישן לחדש
  • מהחדש לישן
  • הכי הרבה הצבעות
התחברו כדי לפרסם תגובה
נושא זה נמחק. רק משתמשים עם הרשאות מתאימות יוכלו לצפות בו.
  • א מנותק
    א מנותק
    אהרן
    כתב ב נערך לאחרונה על ידי
    #1
    var s = "Ahron"
    var r = /^(Ahr)(o?)([^n])/
    

    מחזיר

    Full match	0-4	`Ahro`
    Group 1.	n/a	`Ahr`
    Group 2.	n/a	``
    Group 3.	n/a	`o`
    

    כלומר, בשביל שלא להחזיר null, ה-regex מימש את האפשרות "לא למצוא" את O בתיבה 2 ושם אותו בתיבה 3 בו כתוב "כל תו שאינו n".

    יש לי עם זה 2 בעית

    1. במידה ואני רוצה להחליף את O, אני לא יודע באיזה תיבה הוא נמצא.
    2. הצפיה שלי היא שבמקרה כזה ש-O נמצא, הוא ימומש, ואז בגלל ^n כל החיפוש יכשל ויחזיר null.

    אז הפתרון הוא להכניס את O שוב לשלילה, כך:

    var r = /^(Ahr)(o?)([^on])/
    

    משום מה, זה נראה לי פתרון עקום (אולי אני טועה)
    דבר שני אם יש רצף ארוך יותר של תווים אופציונאליים (כמו O בדוגמא לעיל) זה ממש מלכלך את הקוד.
    האם יש פתרון אלגנטי יותר, לומר לו "אל תממש את האפשרות 'לא למצוא' במידה והתו קיים".

    מקווה מאוד שאני ברור מספיק
    זה שיגע אותי יממות (ללא הגזמה!)
    תודה מראש!

    פורסם במקור בפורום CODE613 ב18/02/2017 22:31 (+02:00)

    תגובה 1 תגובה אחרונה
    0
    • א מנותק
      א מנותק
      אהרן
      כתב ב נערך לאחרונה על ידי
      #2

      דוד היקר אמר לי שהתשובה נמצאת באפשרות grupe names‏.
      אבל לא זכיתי להבין
      ככל שאני מבין, זה מאפשר לשמור תווית בשם, בשביל להשתמש בו פעמים נוספות. איך זה עוזר כאן?
      בנוסף כשסימנתי בטבלה הזו JavaScript, כל העמודה מסומנת כ-no או n/o. הכוונה שאין לזה תמיכה ב-JS?

      פורסם במקור בפורום CODE613 ב18/02/2017 22:42 (+02:00)

      תגובה 1 תגובה אחרונה
      0
      • dovidD מנותק
        dovidD מנותק
        dovid ניהול
        כתב ב נערך לאחרונה על ידי
        #3

        אני טעיתי, אין את היכולת הזו בRegex של JS.
        זה היה עוזר כי היית נותן שם לקבוצה של o, והיית פונה אליו.
        אבל למשעה אינני מבין את הבעיה:

        var texts = ["Ahron", "Ahroe", "Ahree"];
        var reg = /^(Ahr)(o?)([^on])/;
        
        for (let text of texts) {
          console.log(text.match(reg));
        }
        

        הפלט הוא:
        null
        ["Ahroe", "Ahr", "o", "e"]
        ["Ahre", "Ahr", "", "e"]

        אז תמיד $2 זה מקום ה-o האופציונלי, לא כן?

        פורסם במקור בפורום CODE613 ב18/02/2017 23:27 (+02:00)

        מנטור אישי למתכנתים (ולא רק) – להתקדם לשלב הבא!

        בכל נושא אפשר ליצור קשר dovid@tchumim.com

        תגובה 1 תגובה אחרונה
        1

        בא תתחבר לדף היומי!
        • התחברות

        • אין לך חשבון עדיין? הרשמה

        • התחברו או הירשמו כדי לחפש.
        • פוסט ראשון
          פוסט אחרון
        0
        • דף הבית
        • קטגוריות
        • פוסטים אחרונים
        • משתמשים
        • חיפוש
        • חוקי הפורום