שלח תשובה

זירת השאלות

473
צפיות
7
תשובות

שאלות ב RegExp

,‏ 21 ביולי, 2004

שלום!
אני רוצה להוסיף על הידע המועט שלי את regexp.
אז היסתכלתי ב FAQ של JavaScript וראיתי את הסינטקס של זה,אז חוץ מיזה שזה ניראה כמו סקריפט Perl מוזר ואני פוחד מוות למגעת בזה,זה גם לא משהוא ברור.
אשמח אם תסבירו לי מאיפה אפשר לילמוד את זה,כלומר,לילמוד ולהישאר בחיים מבלי להישתגעה.
תודה.

תגיות:

7 תשובות

  1. ניר טייב הגיב:

    חחח… גם אני חשבתי כך בהתחלה 😛
    בא לך על ה-MSDN ?
    או שמא אתה רוצה את devguru ?

  2. אוריקס הגיב:

    הדרך היחידה ללמוד RegExp
    היא פשוט להתעסק עם זה..

  3. ניר טייב הגיב:

    מדריך קצר ל-regExp
    (המדריך לא שלם ולא עובר על כל הנושא)
    regExp זה אובייקט שיוצר תבנית טקסט
    מכריזים עליו באחת משתי הדרכים הבאות
    ע"י ה-constructor (הבונה)

    var rExp = new RegExp("pattern","options")

    או ע"י הליטרל (הדרך המומלצת והמהירה)

    var rExp = /pattern/options

    המאפיין options קובע האם האובייקט התייחס לכל הטקסט והאם הוא לא יתייחס להבדל בין אותיות גדולות לקטנות (CASE INSESITIVE)
    כדי לסמן שהאובייקט יתייחס לכל הטקסט כותבים את האות ה-g (מהמילה global)
    כדי לסמן שהאובייקט לא יתייחס להבדל בין אותיות גדולות לקטנות כותבים את האות i
    ניתן להשתמש בשניהם ביחד ע"י כתיבת gi
    דוגמאות:

    var rExp = /pattern/gi // global & case insensitive
    var rExp = /pattern/g // global
    var rExp = /pattern/i // case insensitive

    המאפיין pattern  קובא את תבנית הטקסט שאליה האובייקט יתייחס
    מאפיין זה יכול להכין סימנים מיוחדים(רגולריים) אותיות,מספרים ותווים רגילים

    תווים רגולריים
    – מסמן את התו שאחרי או escape sequence
    לדוגמא: "\" – יסמן את התו הרגיל
    n – יסמן שורה חדשה

    ^ – מסמן את תחילת המחרוזת. אם אובייקט ה-regExp אופיין כרב שורתי (multiline) אז התו ^ מסמן את התו שבא אחרי ה-n או r

    $ – מסמן את סוף המחרוזת. אם אובייקט ה-regExp אופיין כרב שורתי (multiline) אז התו $ מסמל את התו שלפני ה-n או לפני ה-r

    (המשך בהודעה הבאה)

  4. ניר טייב הגיב:

    המשך
    * – מסמל שהתו שקדם לו יכול להופיע במחרוזת אפס פעמים או מס' פעמים ברצף. לדוגמא: *zo מסמל את האות z ואת המחרוזת zoo

    + – מסמל שהתו שקדם לו יכול להופיע פעם אחת לפחות או יותר ברצף. לדוגמא: *zo מסמל את המחרוזת zoo אבל לא את המחרוזת z

    ? – מסמל שהתו שלפניו יופיע פעם אחת או בכלל לא.
    לדגומא: *(do(es מסמל את do ו-does

    {n} – n הוא מספר אי שלילי. מסמל את התו שלפניו n פעמים בדיוק!
    לדוגמא: {o{2 לא מסמל את o במחרוזת Bob אבל מסמל את את הדאבל o במחרוזת food

    {,n} – n הוא מספר אי שלילי. מסמל את התו שלפניו לפחות n פעמים. לדוגמא {,o2} לא מסמל את ה-o במחרוזת Bob אבל כן מסמל את כל ה-o במחרוזת "foooooooooooooood"
    {,o{0 שווה לתו *
    {,1}o שווה לתו +

    {n,m} nו-m הם מספרים אי שליליים כאשר n קטן מ-m. מסמל את התו שלפניו בין n ל-m פעמים
    לדוגמא: {1,3} יסמל את ה-o היחיה במחרוזת Bob או את הדאבל o במחרוזת boobs 😛 או את הטריפל o במחרוזת foood אבל לא את ה-o במחרוזת gooooooooood

    .(נקודה) – מסמל את כל התווים חוץ מה-escapse sequence הזה n . כדי לסמל את כל התווים כולל n משתמשים בתבנית [sS]

    x|y – מסמל או את x או את y. לדוגמא

    (z|f)ood

    מסמל או את המחרוזת zood או את המחרוזת food

    סדרות
    [xyz] – מסמל רק את התווים הנמצאים בתוך ה[] מתוך המחרוזת. לדוגמא [abc] מסמל את ה-a ב-plain
    [xyz^] – מסמל את כל התווים שלא נמצאים בתוך ה-[] מתוך מחרוזת. לדוגמא[abc^] מסמל את האות p ב-plain
    [a-z] – מסמל את כל התווים שנמצים בין התו השמאלי למקף לתו הימני במקף. לדוגמא [a-z] מסמל את כל אותיות האלפאבית באנגלית.
    [a-z^] – מסמל את כל התווים שלא נמצאים בין התו השמאלי למקף לתו הימני למקף. לדוגמא [a-z^] מסמל את כל התווים שהם לא אותיות באנגלית

    (המשך בהודעה הבאה)

  5. ניר טייב הגיב:

    options ו-pattern
    הם פרמטרים לא מאפיינים

  6. ניר טייב הגיב:

    המשך
    שיטות
    שיטת test
    תחביר:

    regExpObj.test([str])

    הפרמטר str הוא מסוג מחרוזת והשיטה בודקת האם המחרוזת שמועברת כפרמטר ממלאת אחרי התבנית השיטה מחזירה ערך בוליאני (trueאו false). הדוגמא הבאה למשל בודקת האם במחרוזת יש אך ורק מספרים ואותיות.

    var rExp1 = /[a-z0-9]/gi
    var strTest = "nir the king"
    var bAfterPattern = rExp.test(strToTest) // return true

    השיטה compile
    דורסת את הפרמטרים שהוגדרו עם הגדרת ה-regExp ושמה פרמטרים חדשים

    var rExp = /[a-z]/gi;   // with case insensitive
    rExp.compile("[a-z]","g"); // without case insensitive

    השיטה exechttp://www.devguru.com/Technologies/ecmascript/quickref/regexp_exec.html

  7. ניר טייב הגיב:

    שיטות באובייקט String
    שדורשות שימוש ב-regExp

    השיטה replace
    תחביר

    str.replace(regExp,strToReplace)

    str – משתנה מחרוזת
    regExp – אובייקט RegExp
    strToReplace – מחרוזת שתחליף את כל הביטויים שנמצאו מתאימים לתבנית של אובייקט ה-regExp

    השיטה match
    תחביר

    var anArray = str.match(regExp)

    str – מחרוזת
    regExp – אובייקט regExp

    השיטה מחזירה מערך של כל הביטויים שנמצאו מתאימים לתבנית של אובייקט ה-regExp

    http://www.devguru.com/Technologies/ecmascript/quickref/string_match.html

    השיטה search
    תחביר

    nPosition = str.search(regExp)

    str – משתנה מחרוזת
    regExp – אובייקט RegExp
    מחזיר את המיקום של תחילת הביטוי שנמצא מתאים ל-pattern של ה-regExp
    אם לא נמצא התאמה מוחזר 1- (מינוס אחד)
    http://www.devguru.com/Technologies/ecmascript/quickref/string_search.html

שלח תשובה