Regular Expressions  در جاوا اسکریپت

ناصر نادری | 1393/11/20


بنام خدا .  این جلسه رو میخواییم اختصاص بدیم به عبارات منظم یا Regular Expressions در جاوا اسکریپت .

عبارت منظم در واقع یک الگویی از نحوه  چینش انواع کاراکتر ها در یک رشته است .  مثلا رشته حاوی آدرس  ایمیل یک الگوی خاصی داره به این ترتیب که ابتدا چند حرف یا عدد یا کاراکترهای ویژه خاصی میاد بعد یه علامت @ بعدش حرف یاعدد بخش دامنه بهدش نقطه بعدش پسوند دامنه . اینیکه گفتم یک الگو هست . این مبحث تو دوجا کاربرد داره , یکی توی جستجوی یک الگو در یک رشته و یکی توی جایگزین کردن یکی رشته با یک الگو .

نحوه نوشتن یک الگو به شکل زیر هست :

 /pattern/modifires;
var patt = /appinapps/i  

بخش pattern همون الگوی ماست که باید بین دو تا علامت' / ' قرار بگیره و modifire تعیین کننده نوع  کیفیت جستجو هست .  یعنی اینکه به حروف بزرگ و کوچک حساس باشه یا نه و غیره .

 var str = "this is AppInApps";
var n = str.search(/AppInApps/i); //  الگوی مورد نظر داخل رشته جستجو میشه اگر موجو باشه اندیس کاراکتر شروع این الگو رو بر میگردنه که در اینجا عدد 8 هست 

توی مثال زیر از جایگزینی الگو در در رشته استفاده کردیم :

 var str = "Visit appinapps!";
var res = str.replace(/appinapps/i, "AppInApps"); //با حساسیت به حروف بزرگ و کوچک الگوی appinapps رو با AppInApps جایگزین میکنه و رشته جدید رو بر میگردون 

همونطور که ملاحظه میکنید این نوع جایگزینی و جستجو مثل جایگزینی و جستجو رشته هاست ولی تفاوت اینجاست  که در جستجوی یک الگو دقت مسئله بالا تر میره . مثلا اینکه حروف بزرگ و کوچک توی جستجو لحاظ بشه یا اینکه  تعیین کنیم که الگوی مورد جستجو محتوی عدد باشه یا نه .

لیست زیر modifire هایی رو که  در الگو استفاده میشه نشون میده :

مدیفایر توضیحات
i با این علامت جستجو اندازه حروف رو در نظر میگیره
g تطبیق  الگو با تمام الگوهای مشابه داخل رشته
m اعمال تطبیق در چند خط برای جستجو

لیست زیر نیز الگوها پر استفاده در جستجو رو نشون میده

عبارت توضیحات
[abc] پیدا کردن هریک از کاراکتر های بین براکت
[0-9] پیدا کردن هریک از اعداد داخل براکت
(x|y) پیدا کردن هر الگویی که با | از هم جداشدن
[^abc] الگویی که درش کاراکترهای داخل براکت نباشه
[^0-9] الگویی که توش اعداد داخل براکت نباشه

لیست زیر بعضی از کاراکتر هایی رو مشخص میکنه که داخل الگو از معنای خاصی برخوردارن:

.               پیدا کردن یک تک کاراکتر غیر از فاصله خالی  \w            پیدا کردن یک کاراکتر از نوع کلمه \W           پیدا کردن یک کاراکتر از نوع غیر کلمه \d             پیدا کردن یک عدد \D            پیدا کردن یک کاراکتر غیر عددی \s             پیدا کردن یک فاصله خالی \S            پیدا کردن کاراکتر غیر فاصله خالی \b            پیدا کردن یک تطبیق در اول یا آخر کلمه \B            پیدا کردن یک تطبیق که در ابتدا و انتهای کلمه نیاید \0            پیدا کردن یک کاراکتر null \n            پیدا کردن کاراکتر خط جدید \f             پیدا کردن کاراکتر فید \r            پیدا کردن کاراکتر مربوط به دکمه اینتر \t             پیدا کردن کاراکتر مربوط به تب \v            پیدا کردن کاراکتر مربوط به تب عمودی \xxx         پیدا کردن یک کاراکتر مشخص شده با عدد هگزا دسیمال

Quantifiers  ها علائمی هستن که وجود یک کاراکتر رو داخل یک الگو بررسی میکنن

Quantifier Description
n+ تطبیق تمام رشته هایی که حداقل یک n داشته باشن
n* تطبیق تمام رشته هایی که صفر یا چند کاراکتر n دارن
n? تطبیق تمام رشته هایی که صفر یا یک کاراکتر n دارن
n{X} تطبیق با هر رشته ای که حاوی دنبالهای از کارکتر های X است
n{X,Y} تطبیق با هر رشته ای که حاوی دنباله ای از کاراکتر های X تا Y است
n{X,} تطبیق با هر رشته ای که حاوی دنبالهی حداقل از X باشد
n$ تطبیق با هر رشته ای که حداقل یک n در انتها داشته باشد
^n تطبیق با هر رشته ای که در ابتدای آن n باشد

میتونیم از متد test برای تطبیق استفاده کنیم . این متد اگر الگوی شمارو داخل رشته پیدا کنه  true و در غیر اینصورت false رو برمیگدونه.

 var patt = /e/;
patt.test("The best things in life are free!"); //اگر الگوی مورد نظر که /e/ هست رو پیدا کنه که میکنه true رو برمیگردون
 /e/.test("The best things in life are free!") ;// میتونیم از این روش هام استفاده کنیم 

متد exec هم همون کار رو برمیگردون با اینتقاوت که اگه الگو رو پیدا کنه رشته برمیگردون  و اگرنه null رو برمیگردونه .

 /e/.exec("The best things in life are free!"); // تازمانی که حاوی الگ. مورد نظر با شه حرف e رو برمیگردونه 

تا جلسه بعد در پناه حق...


فایلهای ضمیمه
توجه! هیچ فایل ضمیمه ای برای این مطلب یافت نشد

نظرات شما نظر جدید