به نام خدا با عرض سلام و احترام خدمت شما دوستان عزیز. در ادامه آموزش جاوا اسکریت این جلسه قصد داریم به مبحث ریجکس در جاوا اسکریپت بپردازیم.با ما همراه باشید.
Regular Expression یا عبارت منظم چیست؟
عبارات منظم که معمولاً به عنوان “regex” یا “RegExp” شناخته می شوند، رشته های متنی با فرمت خاصی هستند که برای یافتن الگوها در متن استفاده می شوند.عبارات منظم یکی از قدرتمندترین ابزارهای موجود امروزه برای پردازش و دستکاری متن ، موثر و کارآمد است. به عنوان مثال، می توان از آن برای بررسی اینکه آیا فرمت داده ها مانند نام، ایمیل، شماره تلفن و …وارد شده توسط کاربر صحیح است یا خیر یا برای پیدا کردن محتوای متنی مشخص یا جایگزین کردن ان و … استفاده کرد.
جاوا اسکریپت از عبارات منظم پرل استایل پشتیبانی می کند.چرا عبارات منظم پرل استایل؟زیرا Perl (زبان استخراج و گزارش عملی) اولین زبان برنامه نویسی اصلی بود که پشتیبانی یکپارچه از عبارات منظم را ارائه می کرد و به دلیل پشتیبانی قوی از عبارات منظم و قابلیت های فوق العاده پردازش و دستکاری متن مشهور است.
بیایید با مروری کوتاه بر روشهای داخلی رایج جاوا اسکریپت برای انجام تطبیق الگو قبل از کاوش عمیق در دنیای عبارات منظم شروع کنیم.
- ()exec : جستجوی برای یافتن مطابقت در یک رشته یا آرایه ای از اطلاعات را برمی گرداند یا در صورت عدم تطابق
null
می شود. - ()test: مطابقت رشته با الگو را بررسی میکند.و به عنوان خروجی مقادیر
true
یاfalse
را برمیگرداند. - ()search : سرچ برای مطابقت رشته،در صورت مطابقت اولین ایندکس را برمیگرداند در غیر این صورت مقدار مقدا منفی یک برگشت داده میشد.
- ()replace : جهت جایگزین کردن زیر رشته پس از مطابقت انجام میگیرد.
- ()match : جهت مطابقت یک رشته استفاده میشود.درصورت مطابقت ارایه ای از اطلاعات و دغیر این صورت مقدار
null
برگردانده میشود. - ()split : یک رشته را با استفاده از یک عبارت منظم به آرایه ای از زیررشته ها تقسیم می کند.
نکته: متدهای ()exec و ()test متدهای RegExp هستند که یک رشته را به عنوان پارامتر میگیرند، در حالی که متدهای search()، replace ()، match و() split متدهای رشتهای هستند که یک عبارت منظم را به عنوان یک پارامتر دریافت میکنند.
تعریف عبارات منظم
با بحث ریجکس در جاوا اسکریپت با شما هستیم.در جاوا اسکریپت، عبارات منظم با شی RegExp نمایش داده می شوند که یک شی بومی جاوا اسکریپت مانند String، Array و …است .دو راه برای ایجاد یک شی RegExp جدید وجود دارد – یکی استفاده از لیترال سینتکس و دیگری با استفاده از سازنده() RegExp.
لیترال سینتکس از اسلش های رو به جلو (/pattern/) برای دسته بندی الگوی عبارت منظم استفاده می کند، در حالی که نحو سازنده از نقل قول ها (“pattern“) استفاده می کند.مثال زیر هر دو روش ایجاد یک عبارت منظم را نشان می دهد که با هر رشته ای که با “Mr” شروع می شود مطابقت دارد.
// Literal syntax var regex = /^Mr\./; // Constructor syntax var regex = new RegExp("^Mr\\.");
همانطور که می بینید، عبارت منظم لیترال سینتکس کوتاه تر و راحت تر خوانده می شود. بنابراین بهتر است ازهمین نحو استفاده شود.در طول آموزش نیز از همین نحو استفاده خواهد شد.
توجه: هنگام استفاده از نحو سازنده، باید کاراکترهای ویژه را دو برابر کنید، که به معنای مطابقت با “.” شما باید بجای” ./” بنویسید”.\\” . اگر فقط یک بک اسلش وجود داشته باشد، توسط تجزیه کننده رشته جاوا اسکریپت به عنوان یک کاراکتر فرار تفسیر می شود و حذف می شود.
تطبیق الگو با عبارت منظم
الگوهای عبارت منظم شامل حروف، اعداد، علائم نقطه گذاری و …، به علاوه مجموعه ای از کاراکترهای عبارت منظم خاص (با کاراکترهای خاص HTML اشتباه نگیرید)می باشد.
کاراکترهایی که در یک عبارت منظم به آنها معنی خاصی داده می شود عبارتند از:
.
*
?
+
[
]
(
)
{
}
^
$
|
\
.بخشهای زیر گزینههای مختلف موجود برای فرمولبندی الگوها را توضیح میدهند:
Character Classes
براکت های مربعی که الگوی کاراکترها را احاطه کرده اند، کلاس کاراکتر نامیده می شوند. [abc]. یک کلاس کاراکتر همیشه با یک کاراکتر از لیست کاراکترهای مشخص شده مطابقت دارد، به این معنی که عبارت [abc] فقط با کاراکتر a، b یا c مطابقت دارد.
کلاسهای کاراکتر منفی را نیز میتوان تعریف کرد که با هر کاراکتری به جز آنهایی که در داخل پرانتز قرار دارند مطابقت دارند. یک کلاس کاراکتر منفی با قرار دادن نماد caret (^
) بلافاصله بعد از براکت آغازین، مانند [abc^]، که با هر کاراکتری به جز a، b و c مطابقت دارد، تعریف میشود.
همچنین می توانید با استفاده از خط فاصله (-
) در داخل یک کلاس کاراکتر، مانند [0-9]، محدوده ای از کاراکترها را تعریف کنید. بیایید به چند نمونه از کلاس های کاراکتری نگاه کنیم:
- [abc] : با هر یک از کاراکترهای a، b یا c مطابقت دارد.
- [abc^] : با هر یک از کاراکترهای غیر از a، b یا c مطابقت دارد.
- [a-z] : هر یک از کاراکترها را از حروف کوچک a تا حروف کوچک z مطابقت می دهد.
- [0-9] : برای مطابقت اعداد یک رقمی بین 0 و 9.
- [a-z0-9] : یک کاراکتر بین a تا z یا بین 0 تا 9 مطابقت دارد.
مثال زیر به شما نشان می دهد که چگونه با استفاده از عبارت منظم با متد ()test جاوا اسکریپت پیدا کنید که آیا یک الگو در یک رشته وجود دارد یا خیر:
var regex = /ca[kf]e/; var str = "He was eating cake in the cafe."; // Test the string against the regular expression if(regex.test(str)) { alert("Match found!"); } else { alert("Match not found."); }
علاوه بر این، میتوانید فلگ سراسری g را به یک عبارت منظم اضافه کنید تا همه موارد تطابق یافته در یک رشته را پیدا کنید:
var regex = /ca[kf]e/g; var str = "He was eating cake in the cafe."; var matches = str.match(regex); alert(matches.length); // Outputs: 2
نکته: عبارات منظم مختص جاوا اسکریپت نیستند. زبان هایی مانند جاوا، پرل، پایتون، پی اچ پی و …برای یافتن الگوها در متن از نمادهای مشابهی استفاده می کنند.
کلاس های کاراکتر از پیش تعریف شده
برخی از کلاسهای کاراکتر مانند ارقام، حروف و فضاهای خالی آنقدر استفاده میشوند که نام میانبر برای آنها وجود دارد.جدول زیر آن دسته از کاراکترهای از پیش تعریف شده را فهرست می کند:
. : با هر کاراکتری به جز خط جدید n\ مطابقت دارد.
d\ : با هر کاراکتر رقمی مطابقت دارد. همانند [0-9]
D\ : با هر کاراکتر غیر رقمی مطابقت دارد. مشابه [^0-9]
s\ : با هر فضای خالی مطابقت دارد.مانند:[t\n\r\].
S\: با هر کاراکتر بدون فضای خالی مطابقت دارد. مانند: [t\n\r\^ ].
w\: با هر کاراکتر کلمه ای مطابقت دارد (تعریف شده به صورت a تا z، A تا Z، 0 تا 9 و اندرلاین ( _ )).همانند: [a-zA-Z_0-9]
W\ : با هر کاراکتر غیر کلمه ای مطابقت دارد. مشابه [a-zA-Z_0-9 ^ ].
مثال زیر به شما نشان می دهد که چگونه با استفاده از عبارت منظم با متد ()
replace
جاوا اسکریپت، فضا را با یک کاراکتر خط فاصله در یک رشته پیدا کرده و جایگزین کنید:
var regex = /\s/g; var replacement = "-"; var str = "Earth revolves around\nthe\tSun"; // Replace spaces, newlines and tabs document.write(str.replace(regex, replacement) + "<hr>"); // Replace only spaces document.write(str.replace(/ /g, "-"));
Repetition Quantifiers
در بخش قبل یاد گرفتیم که چگونه یک کاراکتر را در مدهای مختلف مطابقت دهیم. اما اگر بخواهید با بیش از یک کاراکتر مطابقت داشته باشید، چه؟ به عنوان مثال، فرض کنید می خواهید کلماتی را که حاوی یک یا چند مورد از حرف p هستند، یا کلماتی که حداقل دو حرف p و غیره دارند، پیدا کنید.
اینجاست که کمیت سازها وارد عمل می شوند. با کمیت سازها می توانید تعیین کنید که یک کاراکتر در یک عبارت منظم چند بار باید مطابقت داشته باشد. کمیتکنندهها را میتوان برای نویسههای فردی، کلاسهای کاراکترها و گروههایی از کاراکترهای موجود در پرانتز اعمال کرد.
p{2,3}: حداقل با دو مورد از حرف p مطابقت دارد، اما نه بیشتر از سه مورد.
عبارت منظم در مثال زیر رشته را در کاما، دنباله کاما، فضای خالی یا ترکیبی از آنها با استفاده از متد()split
جاوا اسکریپت تقسیم می کند:
var regex = /[\s,]+/; var str = "My favourite colors are red, green and blue"; var parts = str.split(regex); // Loop through parts array and display substrings for(var part of parts){ document.write("<p>" + part + "</p>");
جهت تمرین ریجکس در جاوا اسکریپت میتوانید از سایت ریجکس استفاده نمایید.
دیدگاهتان را بنویسید