با بخش دوم از نحوه کار با Regular Expression در جاوا اسکریپت از سری آموزش جاوا اسکریپت خدمت شما عزیزان هستیم.
در قسمت اول موارد پایه و اساسی و نحوه استفاده متدهای مختلف در جاوا اسکریپت به منظور تطابق الگو ها را یاد گرفتیم. در ادامه قصد داریم مباحث باقی مانده از Regular Expression در جاوا اسکریپت را تکمیل کنیم.
شمارنده تکرار (Repetition Quantifiers)
در بخش قبلی نحوه تطابق یک کاراکتر تنها در انواع مختلف را دیدی اما چه می شد اگر قصد تطابق دو یا چند تا از یک کاراکتر را داشتید.
برای مثال فرض کنیم قصد دارید کلمات موجود در یک یا چند نمونه از حروف p یا کلمات شامل دو حروف p
و .. پیدا کنید.
اینجاست که کوانتیزرها (Quantifiers) وارد بازی می شوند. با شمارنده ها شما به راحتی می توانید مشخص کنید که چندبار یک کاراکتر در عبارت باقاعده باید تطابق پیدا کند.
شمارنده ها می توانند به کاراکترهای تکی نیز اعمال شوند.
RegExp | چه کار می کند |
---|---|
p+ |
Matches one or more occurrences of the letter p. |
p* |
Matches zero or more occurrences of the letter p. |
p? |
Matches zero or one occurrences of the letter p. |
p{2} |
Matches exactly two occurrences of the letter p. |
p{2,3} |
Matches at least two occurrences of the letter p, but not more than three occurrences. |
p{2,} |
Matches two or more occurrences of the letter p. |
p{,3} |
Matches at most three occurrences of the letter p |
مثال Regular Expression زیر رشته ها در کاما, توالی کاماها, فاصله خالی یا ترکیب از آنها را با متد split()
در جاوا اسکریپت جدا می کند.
1 2 3 4 5 6 7 8 |
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>"); } |
لنگرگاه موقعیت (Position Anchors)
موقعیت های خاصی هستند که می خواهید اول یا اخر یک خط, کلمه, یا رشته را تطابق کنید. برای اینکار می توانید علامت ^
برای شروع رشته و $
برای پایان رشته استفاده کنید.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
<table class="data"> <thead> <tr> <th>RegExp</th> <th>What it Does</th> </tr> </thead> <tbody> <tr> <td><code>^p</code></td> <td>Matches the letter p at the beginning of a line.</td> </tr> <tr> <td><code>p$</code></td> <td>Matches the letter p at the end of a line.</td> </tr> </tbody> </table> |
عبارت باقاعده در مثال زیر فقط نام هایی در آرایه نام ها را با متد test()
در جاوا اسکریپت انتخاب می کند که شروع آنها با J شروع شده باشد.
1 2 3 4 5 6 7 8 9 |
var regex = /^J/; var names = ["James Bond", "Clark Kent", "John Rambo"]; // Loop through names array and display matched names for(var name of names) { if(regex.test(name)) { document.write("<p>" + name + "</p>") } } |
اصلاح کننده الگو (Pattern Modifiers)
یک modifier به شما اجازه می دهد که نحوه تطابق الگو را کنترل کنید. Modifier ها مستقیما بعد از عبارات باقاعده قرار می گیرند.
برای مثال, اگر قصد جستجوی یک الگو بصورت غیرحساس به حروف کوچک و بزرگ هستید, می توانید از i
بصورت /pattern/i
استفاده کنید.
Modifier | چه کار می کند |
---|---|
g |
Perform a global match i.e. finds all occurrences. |
i |
Makes the match case-insensitive manner. |
m |
Changes the behavior of ^ and $ to match against a newline boundary (i.e. start or end of each line within a multiline string), instead of a string boundary. |
o |
Evaluates the expression only once. |
s |
Changes the behavior of . (dot) to match all characters, including newlines. |
x |
Allows you to use whitespace and comments within a regular expression for clarity. |
مثال زیر به شما نحوه استفاده از i
و g
در عبارات باقاعده برای انجام یک جستجوی global سراسری و case-insensitive غیرحساس به حروف کوچک و بزرگ با متد match()
را نشان می دهد:
1 2 3 4 5 |
var regex = /color/gi; var str = "Color red is more visible than color blue in daylight."; var matches = str.match(regex); // global, case-insensitive match console.log(matches); // expected output: ["Color", "color"] |
مشابه بالا, این مثال نیز به شما نحوه تطابق در اول هر خط در هر رشته چندخطی با علامت ^
و فلگ m
با متد match()
با جاوا اسکریپت را نشان می دهد.
1 2 3 4 5 |
var regex = /^color/gim; var str = "Color red is more visible than \ncolor blue in daylight."; var matches = str.match(regex); // global, case-insensitive, multiline match console.log(matches); // expected output: ["Color", "color"] |
جایگزینی (Alternation)
Alternation به شما اجازه می دهد که یک نسخه جایگزین از یک الگو را مشخص کنید. Alternation در عبارات باقاعده مثل اپراتور OR
در دستور شرطی if-else عمل می کند.
می توانید Alternation را با خط عمودی |
مشخص کنید. برای مثال /fox|dog|cat/
رشته fox
یا dog
یا cat
را مچ می کند.
1 2 3 4 5 |
var regex = /fox|dog|cat/; var str = "The quick brown fox jumps over the lazy dog."; var matches = str.match(regex); console.log(matches); // expected output: ["fox", index: 16, ...] |
نکته: Alternation از چپ به راست تا زمانی که یکی پیدا شود, ارزیابی می کند. اگر جایگزینی چپ پیدا شود, کل جایگزینی راست نادیده گرفته می شود حتی اگر پیدا شود.
گروه بندی (Grouping)
عبارات باقاعده از پارانتز برای گروه بندی مثل عبارات ریاضی استفاده می کند. پارانتزها به شما اجازه استفاده از شمارشگرهای تکرار را داخل خود عبارت اصلی را می دهد.
برای مثال در عبارت /go+/
شمارشگر +
فقط روی آخرین کاراکتر که o است اعمال می شود و عبارت های go, goo و … را پیدا می کند.
به هرحال, در عبارت باقاعده /(go)+/
شمارشگر +
روی گروه کاراکترهای g و o اعمال می شود و رشته های go , gogo و.. را تطابق می دهد.
1 2 3 4 5 |
var regex = /(go)+/i; var str = "One day Gogo will go to school."; var matches = str.match(regex); // case-insensitive match console.log(matches); // expected output: ["Gogo", "go", index: 8, ...] |
نکته: اگر رشته الگو موردنظر تطابق پیدا کند, متد match()
یک آرایه شامل کل رشته های تطابق یافته را به عنوان المان اول برگشت می دهد. در غیر اینصورت null
را برگشت می دهد
نکته ۲ : اگر عبارت باقاعده شامل فلگ g
باشد, متد match()
فقط یک آرایه شامل تمام رشته های مچ شده را به جای شیء مچ شده برگشت می دهد.
مرز کلمات (Word Boundaries)
یک کاراکتر مرز کلمات (\b
) به شما کمک می کند که کلمه ای که با یک الگو شروع و/یا پایان می یابد.
برای مثال, عبارت باقاعده /\bcar/
کلمه ای که با الگوی car و شاید cart, cattor, cartoon را تطابق دهد اما Oscar را انتخاب نمی کند.
مشابه آن, عبارت باقاعده /car\b/
کلمه ای که با الگوی car و Oscar یا supercar را انتخاب اما cart را انتخاب نمی کند. همچنین /\bcar\b/
کلماتی که اول و آخر آنها car است را انتخاب می کند که تنها کلمه انتخابی car خواهد بود.
1 2 3 4 5 |
var regex = /(\bcar\w*)/g; var str = "Words begining with car: cart, carrot, cartoon. Words ending with car: oscar, supercar."; var replacement = '<b>$1</b>'; var result = str.replace(regex, replacement); document.write(result); |
امیدواریم در این بخش آموزش جاوا اسکریپت, از قسمت آخر آموزش Regular Expression در جاوا اسکریپت نهایت استفاده را برده باشد.
هر سوالی داشتید ، از قسمت نظرات ارسال کنید . سریعا ، پاسخگوی سوالات شما هستیم .
موفق باشید.
سلام مهندس شفیعی نازنین خدا قوت من آموزش آپلود عکس در ckeditor میخوام ولی فارسی هیچی پیدا نمیشه اگه براتون مقدور هست قرار بدین
سپاس از راهنمایی تون موفق باشید