در این بخش از سری آموزش جاوا اسکریپت قصد داریم به شما نحوه کار با Regular Expression در جاوا اسکریپت و استفاده از آن برای تطبیق الگو بصورت موثر نشان بدیم.
عبارات باقاعده (Regular Expression) چیست
Regular Expression که معمولا “regex” یا “RegExp” شناخته می شود, یک رشته متنی فرمت بندی شده به صورت خاص برای پیدا کردن یک الگو در متن است.
Regular Expression یکی از قوی ترین ابزارهای موجود حال حاضر برای پردازش و دستکاری موثر و کارامد متن است.
برای مثال, می تواند برای تایید نام, ایمیل, شماره تماس, اعداد وارد شده توسط کاربر که صحیح است یا نه, پیدا کردن یا جایگزین رشته ای در محتوای متن و غیره… استفاده شود.
جاوا اسکریپت از استایل عبارات باقاعده زبات Perl پشتیبانی می کند چراکه Perl اولین مسیر اصلی زبان برنامه نویسی که پشتیبانی یکپارچه برای عبارات باقاعده را ارایه داد و به خاطر پشتیبانی قوی از Regular Expression و قابلیت بسیار خارق العاده پردازش و دستکاری متن, شناخته شده است.
شروع کنیم یک مرور مختصری از متدهای استفاده شده در جاوا اسکریپت برای انجام تطابق الگو قبل از ورود به دنیای Regex , داشته باشیم.
تابع | چه کار می کند |
---|---|
exec() |
Search for a match in a string. It returns an array of information or null on mismatch. |
test() |
Test whether a string matches a pattern. It returns true or false . |
search() |
Search for a match within a string. It returns the index of the first match, or -1 if not found. |
replace() |
Search for a match in a string, and replaces the matched substring with a replacement string. |
match() |
Search for a match in a string. It returns an array of information or null on mismatch. |
split() |
Splits up a string into an array of substrings using a regular expression. |
نکته: متدهای exec()
و test()
جز متدهای RegExp هستند که یک رشته را به عنوان پارامتر دریافت می کنند. درحالی که متدهای search()
, replace()
, match()
و split()
متدهای رشته هستند که یک عبارت باقاعده را به عنوان پارامتر دریافت می کنند.
تعریف Regular Expression در جاوا اسکریپت
در جاوا اسکریپت, عبارات باقاعده توسط شیٔ RegExp نشان داده می شوند. که یک شیٔ نتیو مانند رشته, آرایه و.. است.
دو راه برای ایجاد یک شیٔ RegExp وجود دارد – یکی سینتکس حرفی (literal) و دیگر استفاده از متد سازنده RegExp()
است.
سینتکس literal از اسلش (/pattern/
) استفاده می کندی در حالی که برای متد سازنده از علامت نقل قول استفاده می شود (“pattern”
)
مثال زیر هر دو روش استفاده از Regular Expression را برای تطابق هر رشته ای که با “Mr.” شروع می شود, را نشان می دهد.
1 2 3 4 5 |
// Literal syntax var regex = /^Mr\./; // Constructor syntax var regex = new RegExp("^Mr\\."); |
همانطور که می بینید, سینتکس literal عبارات باقاعده کوتاه تر و ساده تر است بنابراین ترجیحا ما هم از سینتکس حرفی (literal) در کل این آموزش استفاده می کنیم.
نکته: زمانی که از سینتکس متد سازنده استفاده می کنیم, باید قبل از کاراکترهای خاص از دوتا اسلش استفاده کنید. به این معنا که برای مطابقت با “.
” باید از “\\.
” به جای “\.
” استفاده کنید.
اگر فقط یک \
وجود داشته باشد, مفسر جاوا اسکریپت آن را حذف می کند.
تطابق الگو با Regular Expression
الگوهای Regular Expression شامل حروف, اعداد, علامت های نقطه گذاری و غیره.. است. به علاوه مجموعه ای از کاراکترهای خاص عبارت باقاعده (ارتباطی با کاراکترهای خاص HTML ندارد)
کاراکترهایی که داخل عبارت باقاعده دارای معنی خاص هستند : .
*
?
+
[ ]
( )
{ }
^
$
|
\
در هربار استفاده از آن شما باید یک بک-اسلش قبل آنها به کار ببرید. برای مثال, اگر قصد تطابق “.
” را دارید, نیاز است که بنویسید \.
کلاس های کاراکتر
براکت های مربعی اطراف الگویی از کاراکترها کلاس کاراکتر نامده می شوند. مثلا [abc]
یک کلاس کاراکتر همیشه فقط یک کاراکتر تنها خارج از لیست کاراکترهای مشخص شده را مطابقت می دهد به این معنا که عبارت [abc]
کاراکترهای a, b, c را تطابق می دهد.
کلاس کاراکترها همچنین می توانند تعریف شوند که هر کاراکتری بجز آنهایی که در براکت است را انتخاب کند.
یک کلاس کاراکتر نادیده گرفته با قرار دادن ^
بلافاصله بعد از براکت باز ساخته می شود مثل [^abc]
که هر نوع کاراکتری بجز a, b, c را انتخاب می کند.
همچنین می توانید محدوده ای از کاراکترها را با علامت –
داخل کلاس کاراکترها مثل [۰-۹]
مشخص کنید
RegExp | چه کار می کند |
---|---|
[abc] |
Matches any one of the characters a, b, or c. |
[^abc] |
Matches any one character other than a, b, or c. |
[a-z] |
Matches any one character from lowercase a to lowercase z. |
[A-Z] |
Matches any one character from uppercase a to uppercase z. |
[a-Z] |
Matches any one character from lowercase a to uppercase Z. |
[۰-۹] |
Matches a single digit between 0 and 9. |
[a-z0-9] |
Matches a single character between a and z or between 0 and 9. |
مثال زیر به شما نحوه پیدا کردن یک الگو در متن یا استفاده نکردن از عبارات باقاعده و با متد test()
را نشان می دهد:
1 2 3 4 5 6 7 8 9 |
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
را به عبارت باقاعده اضافه کنید تا همه موارد تطابقی در رشته را پیدا کند :
1 2 3 4 |
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 |
نکته: عبارات باقاعده مختص جاوا اسکریپت نیستند و در زبان هایی مانند جاوا, پرل, پایتون, php و .. استفاده می شود.
کاراکتر کلاس های از قبل تعریف شده
بعضی از کاراکتر کلاس ها مانند اعدادد, حروف و فاصله ها مکررا استفاده می شوند که نام های میانبر نیز برای آنها وجود دارد.
میانبر | چه کار می کند |
---|---|
. |
Matches any single character except newline \n . |
\d |
matches any digit character. Same as [0-9] |
\D |
Matches any non-digit character. Same as [^0-9] |
\s |
Matches any whitespace character (space, tab, newline or carriage return character). Same as [ \t\n\r] |
\S |
Matches any non-whitespace character. Same as [^ \t\n\r] |
\w |
Matches any word character (definned as a to z, A to Z,0 to 9, and the underscore). Same as [a-zA-Z_0-9] |
\W |
Matches any non-word character. Same as [^a-zA-Z_0-9] |
مثال زیر به شما نحوه پیدا و جایگزین کردن فاصله با کاراکتر –
در رشته را توسط عبارات باقاعده با متد replace()
در جاوا اسکریپت نشان می دهد:
1 2 3 4 5 6 7 8 9 |
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, "-")); |
امیدواریم در این بخش آموزش جاوا اسکریپت, از قسمت اول آموزش Regular Expression در جاوا اسکریپت نهایت استفاده را برده باشد.
در بخش دوم بقیه مباحث باقی مانده از آموزش Regular Expression در جاوا اسکریپت را یاد خواهیم گرفت.
هر سوالی داشتید ، از قسمت نظرات ارسال کنید . سریعا ، پاسخگوی سوالات شما هستیم .
موفق باشید.