וובמאסטר - תיכנות ובניית אתרים

Regular Expressions - תבניות טקסט

ניר טייב/‏ 25 יולי, 2004
F+
F-

RegExp זה אובייקט שיוצר תבנית טקסט .
מכריזים עליו באחת משתי הדרכים הבאות:
ע"י הבונה של JS:



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

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



1  
var rExp = /pattern/options

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



1
2
3  
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\

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

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

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

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

{n,}
n הוא מספר אי שלילי. מסמל את התו שלפניו לפחות n פעמים. לדוגמא {,2}o לא מסמל את ה-o במחרוזת Bob אבל כן מסמל את כל ה-o במחרוזת "foooooooooooooood"
{0,} שווה ערך ל *
{1,} שווה ערך ל +
{n,m}
n ו-m הם מספרים אי שליליים כאשר n קטן מ-m. מסמל את התו שלפניו בין n ל-m פעמים לדוגמא: {1,3} יסמל את ה-o היחיה במחרוזת Bob או את הדאבל o במחרוזת boobs או את הטריפל o במחרוזת foood אבל לא את ה-o במחרוזת gooooooooood
{0,1} שווה ערך ל ?
.(נקודה) - מסמל את כל התווים חוץ מה-escapse sequence הזה n\ . כדי לסמל את כל התווים כולל n\ משתמשים בתבנית [s\S\]

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



1  
(z|f)ood

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

(x) - ברגע שמסמנים ביטוי מסוים בסוגריים הוא *נשמר* ויהיה אפשר להשתמש בו ע"י ציון $ והאינדקס שלו לפי מס' הפעמים שהשתמשת בסוגריים.
לדוגמא ה-regExp הבא מבטא ביטוי מסוים מוקף בתגיות פסואדו ומשתמש ב-replace (שיוסבר בהמשך)כדי להחליף את תגיות הפסאודו בתגיות HTML אמיתיות ועדיין שהביוטי ישאר ביניהן:



1
2
3
4
5
6
7  
var str="this is |bold| strong word |/bold|"
str = str.replace(/\|bold\|([\s\S]+)\|\/bold\|/gi," $1 ")

/* In our word:
replace "|bold|(a String)|/bold|"
with " (a String) "
*/


[b\] - מסמל את ה-backspace

b\ - מסמל את התו שבקצה המילה. לדגומא: bc\ מסמל במחרוזת "is black cat" את ה-c של cat אבל לא את ה-c של black

B\ - מסמל את התו כשהתו לא בקצה של מילה. לדגומא: Bc\ מסמל במחרוזת "is black cat" את ה-c של black אבל לא את ה-c של cat.

cX\ - מסמל את לחצן הקונטרול(Ctrl)+לחצן אחר במקלדת

d\ - מסמל כל תו שהוא ספרה.

D\ - מסמל כל תו שהוא לא ספרה

f\ - מבטא את ה- formfeed

n\ - מבטא שורה חדשה

r\ - מבטא את מקש האנטר(Enter)

t\ - מבטא את ה-טאב(Tab Character)

v\ - מבטא את הטאב האנכי(Vertical Tab Character)

s\ - מבטא כל מרווח לבן. שווה ערך לביטוי



1  
[\t\v\f\n\r]



S\ - מבטא כל תו שהוא לא מרווח לבן. שווה ערך לביטוי [t\v\f\n\r\^]

w\ - מבטא כל אות באנגלית, כל מספר וקו תחתון(underscore _).שווה ערך לביטוי:



1  
[a-zA-Z0-9_]



W\ - מבטא כל תו שהוא לא אות באנגלית,מספר או קו תחתון.שווה ערך לביטוי:



1  
[^a-zA-Z0-9_]


n\
n הוא ערך אי-שלילי.מסמל את הסוגריים n.לדוגמא:



1
2
3  
/[E-H]\w*(,)(\s)\w*\1\2/
/** \1 match (,)
      \2 match (\s) */



ועוד שני ביטויים רגולריים

\ooctal
 
Where o is an octal escape value, 
this expression allows you to embed ASCII codes into regular expressions.
 
\xhex
 
Where x is an hexadecimal escape value, 
this expression allows you to embed ASCII codes into regular expressions.
   

מאפיינים


$9...$1 - כל n$ שווה לסוגריים מסוימים בתבנית ה-regExp

input - מאפיין זה הוא סטטי והוא מחזיר את הטקסט האחרון שיתבצע עליו אחת מהשיטות הבאות: test,exec לא משנה על איזה אובייקט RegExp

multiline - אם הטקסט נלקח מהאלמנט - TextArea אז המאפיין הזה מקבל ערך true ולהיפך

lastMatch - מאפיין זה מחזיר את התוצאה הראשונה של המתודה Exec. מאפיין זה הוא סטטי ולכן מפעילים אותו בעזרת אובייקט המקור ולא האובייקט שכתבנו



1
2
3  
rexp = /([^aeiou\s]){2}([aeiou])+([^aeiou\s]){2}/
rexp("the fisherman's tale")
alert(RegExp.lastMatch)


ולכן מאפיין זה יחזיר את התוצאה האחרונה של ביצוע המתודה exec לא משנה של איזה אוביקט שיצרנו

lastParen - מחזיר את התוצאה האחרונה של המתודה exec.מאפיין זה הוא סטטי ולכן עלינו לקורא לו דרך RegExp ולא דרך האובייקט שיצרנו



1
2
3  
var rexp = /([^aeiou\s]){2}([aeiou])+([^aeiou\s]){2}/
rexp("the fisherman's tale")
alert(RegExp.lastParen)


leftContext - מחזיר את כל הטקסט שמופיע משמאל לביטוי שהתקבל מהשיטה exec
אחרי כל exec ה-leftContext עובר לאיבר הבא



1
2
3  
rexp = /[aeiou]+/g
alert(rexp("the fisherman") + "\n" +RegExp.leftContext) // return "e" of "the" \n "th"
alert(rexp("the fisherman") +"\n"+ RegExp.leftContext) // return "i" of "fisherman" \n "the f"


rightContext - מחזיר את כל הטקסט שמופיע מימין לביטוי שהתקבל מהשיטה exec
אחרי כל exec ה-rightContext עובר לאיבר הבא



1
2
3
4
5  
rexp = /[aeiou]+/g
alert(rexp("the fisherman") + "\n" +RegExp.leftContext)
// return "e" of "the" \n "fisherman"
alert(rexp("the fisherman") +"\n"+ RegExp.leftContext)
// return "i" of "fisherman" \n "sherman"


leftContext ו-rightContext הם מאפיינים סטטיים ולכן עליהם להיקרא ישירות מ-RegExp ולא מהאובייקט שיצרנו

source - מחזיר את ה-pattern שיצרנו

שיטות

שיטת test
תחביר:



1  
regExpObj.test([str])


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



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



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



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

השיטה exec
תחביר:

1
2  
anArray = regExpObj.exec(str) // in IE
anArray = regExpObj(str) // in NS (Mozilla too)
>


regExpObj - אובייקט RegExp
שיטה זו מחזירה מערך של כל הביטויים(תווים ומילים) שנמצאו מתאימים לתבנית. לדגומא:



1
2
3  
rexp = /([^aeiou\s]){2}([aeiou])+([^aeiou\s]){2}/
var anArray = rexp("the fisherman's tale") // in NS (Mozilla too)
var anArray = rexp.exec("the fisherman's tale") // in IE

שיטות של האובייקט STRING שמשתמשות ב-RegExp


השיטה replace
תחביר:



1  
str.replace(regExp,strToReplace)


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



1  
var anArray = str.match(regExp)


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

השיטה search
תחביר:



1  
nPosition = str.search(regExp)

str - משתנה מחרוזת
regExp - אובייקט RegExp
מחזיר את המיקום של תחילת הביטוי שנמצא מתאים ל-pattern של ה-regExp אם לא נמצא התאמה מוחזר 1- (מינוס אחד)
לעוד פרטים

אובייקט RegExp יורש מאובייקט Object ולכן הוא מקבל גם את השיטות והמאפיינים הבאים:
contructor, toString, prototype, valueOf, toSource, watch ו- unwatch

ניר טייב

בונה אתרים ומתכנת בשפות:
HTML, CSS, JavaScript, PHP 5, JSP&Servlets ורובי.
תגיות: JS‏  /  RE‏  /  Reg Exp‏  /  Regular Expressions‏  /  תבניות טקסט‏  /  מחרוזות‏  

תגובות בפייסבוק

תגובות למאמר



תגיות פופולאריות

X
הצטרף לעמוד שלנו בפייסבוק להישאר מעודכן!
וובמאסטר © כל הזכויות שמורות