הקדמה.
כמעט כל שפה תומכת בעבודה עם Regular Expression, לשפה זו יש יכולות חזקות בעבודה עם מחרוזות והיא מאוד עוצמתית ומהירה.
יש לה אכן תחביר מוזר שצריך להתרגל אליו ולהכיר אותו (או לחפש כל פעם את הביטוי המתאים) בפוסט זה אני אעשה מעבר מהיר על הפונקציות השונות של RegExp ואיך עובדים איתו - אני לא אסביר על התחביר של regular expression אלא אני יוצא מתוך הנחה שיש לכם כבר אחד מוכן ואתם רוצים לדעת כיצד משתמשים בו.
בניית ביטויים.
כדי לייצר מופע של RegExp ניתן לעשות השמה של הביטוי לתוך משתנה או להשתמש ב - ctor של RegExp, כך:
var reg = /pattern/;
var reg = new RegExp("pattern");
אין הבדל ממשי בין השיטות מעבר לעובדה שבשיטה השנייה ניתן ליצור את הביטוי בצורה דינמית מכיוון שזה מקבל מחרוזת.
בדיקת הביטוי.
לאחר שיש לנו את הביטוי ביד (למשל ביטוי המתייחס לספרות בלבד)
var numbersOnly = /^\s*\d+\s*$/;
נוכל להריץ עליו את המתודה exec או את המתודה test, כך:
var res = numbersOnly.exec(value1);
res = numbersOnly.test(value1);
ההבדל ש - exec מחזיר null אם הביטוי לא נכון ובמידה והביטוי נכון הוא מחזיר את הערך,
לעומת test שמחזיר ערך בוליאני האם המחרוזת תואם לביטוי.
בדרך כלל נעדיף את השימוש ב - test. מכיוון שנוח יותר להשתמש בה בפקודות if.
עבודה עם מחרוזות.
למחרוזות ב - javascript יש שני מתודות שעובדות עם ביטויים, replace ו - match.
replace מחליף את הביטוי בערך אחר, למשל:
var r = new String('shl123om').replace(/[0-9]/, ' FFF ');
יחזיר: shl FFF 23om.
הסיבה שזה לא החליף את כולם היא מכיוון שכברירת מחדל הוא מתייחס רק למקום הראשון שהוא מצא תואם לביטוי, נוכל להגדיר שאנחנו רוצים להחליף את כל מי שמתאים לביטוי, נעשה זאת בעזרת ההגדרה של global. (שימו לב ל - g)
var r = new String('shl123om').replace(/[0-9]/g, ' FFF ');
המתודה match מחזירה מערך שמכיל את כל מה שמתאים לביטוי, למשל:
var arr = new String('shl123om').match(/[0-9]/g);
יחזיר מערך בגודל 3 (עם כל המספרים)
מאפיינים שונים.
לכל אובייקט מסוג RegExp יש כמה מאפיינים (לקריאה בלבד)
global - אומר האם הפרמטר g נשלח. (מגדיר את כל מה שמתאים לביטוי במחרוזת)
ignoreCase אומר האם הפרמטר i נשלח. (מגדיר אהם להתייחס לאותיות רישיות)
lastIndex מחזיר את המיקום האחרון שהביטוי תאם.
source מחזיר את הביטוי עצמו.
multiline אומר האם הפרמטר m נשלח.