عبارتهای منظم (RegEx) در جاوا اسکریپت — به زبان ساده
عبارتهای منظم در زبانهای برنامهنویسی برای تطبیق دادن رشتهها مورد استفاده قرار میگیرند. در این مقاله به بررسی روش استفاده از عبارتهای منظم یا RegEx در جاوا اسکریپت میپردازیم.
شروع به کار با عبارتهای منظم
اگر بخواهیم کلمهای مانند help را در رشتهای به صورت زیر پیدا کنیم:
God helps those who help themselves
میتوانیم از یک عبارت منظم RegEx به صورت زیر استفاده کنیم:
/help/
جاوا اسکریپت از متد ()test. استفاده میکند که RegEx را میگیرد و آن را روی یک رشته (که درون پرانتز قرار دارد) اعمال میکند.
این عبارت منظم بسته به این که الگوی مورد نظر مطابقت پیدا کند یا نه، به ترتیب مقادیر true یا false بازگشت میدهد.
1let str1 = "God helps those who help themselves";
2let str2 = "You can't expect everyone to like you";
3let testRegex = /help/;
4testRegex.test(str1); //returns true
5testRegex.test(str2); //returns false
در مثال فوق ما از یک RegEx لفظی به صورت /help/ برای یافتن کلمه help در متغیر str1 و str2 استفاده کردهایم. مثال دیگری از RegEx لفظی میتواند به صورت /expect/ باشد که واژه expect را با رشته تطبیق میدهد.
ما میتوانیم با استفاده از عملگر OR (با کاراکتر |) به دنبال الگوهای چندگانه بگردیم:
Example: if you wanted to match “hi”, “hello”, or “hola”, the RegEx would be: /hi|hello|hola/.
متد تطبیق
متد دیگری نیز در جاوا اسکریپت به صورت ()match. وجود دارد. این متد روی رشتهای اعمال میشود و یک RegEx به عنوان آرگومان میگیرند. متد ()match. آرایهای با RegEx تطبیق یافته بازگشت میدهد.
Example: “Quick brown fox”.match(\brown\); \\returns [“brown”]
فلگها
ما میتوانیم از فلگ i- برای نادیده گرفتن کوچکی/بزرگی حروف در زمان تطبیق یافتن استفاده کنیم. بدین ترتیب هر دو واژه Hello و hello با عبارت منظم /hello/i تطبیق پیدا میکنند.
اگر بخواهیم یک مورد تطبیق یافته را از همه موارد تطبیق یک واژه در رشته استخراج کنیم، باید از فلگ g- به معنی global استفاده کنیم.
Example: “hello, hello, hello”.match(\hello\g); //returns [“hello”,”hello”,”hello”]
همچنین میتوان از فلگهای i- و g- به صورت ترکیبی برای یافتن همه رخدادهای یک کلمه و همچنین نادیدهگیری کوچکی/بزرگی حروف استفاده کرد.
وایلدکارد
کاراکتر وایلدکارد (.) با همه چیز تطبیق پیدا میکند. کاراکتر وایلدکارد با هر چیزی که یک کاراکتر باشد تطبیق مییابد.
Example: if you want to match “huh”,”hut”,”hum”,”hug”, we can use the RegEx /hu./
دستههای کاراکتر
دستههای کاراکتر امکان تعریف گروهی از کاراکترها را که میخواهیم تطبیق بدهیم با قرار دادن آنها درون براکت ([]) فراهم میسازند.
Example: “bag, big, bug, bog”.match(b[aiu]g); //returns [“bag”, “big”, “bug”, “bog”].
برای تطبیق کاراکترها فرض کنید حروف کوچک a تا e باید از [a-e] استفاده کنید.
Example: “cat, bat, mat”.match(/[a-e]at/); //returns [“cat”, “bat”, null]
همچنین میتوانید مجموعهای از کاراکترها که نمیخواهید تطبیق پیدا کنند را نیز ایجاد کنید. این نوع از کاراکترها به نام «مجموعههای کاراکتر منفی» (negated character sets) نامیده میشوند. برای ایجاد چنین مجموعهای باید یک کاراکتر ^ پس از براکت باز و پیش از کاراکترهایی که قرار است تطبیق پیدا نکنند قرار دهید:
Example: /[^aeiou]/gi matches all the non-vowel characters.
توجه کنید که خارج از این مجموعه، کاراکتر ^ جهت جستجو برای الگوهایی در ابتدای رشتهها مورد استفاده قرار میگیرند.
ضمناً میتوانید با استفاده از علامت دلار ($) در انتهای RegEx به دنبال انتهای رشته بگردید.
برای تطبیق دستکم یکباره رخدادهای یک کاراکتر میتوان از کاراکتر + و برای تطبیق کاراکترهایی که صفر یا چند بار در رشته حضور دارند، میتوان از کاراکتر * استفاده کرد.
Example: ‘gooooooooooal!’.match(/go*/); //returns [“goooooooooo”]
تطبیق حریصانه و تنبل
تطبیق حریصانه در عبارتهای منظم به یافتن طولانیترین بخش از یک رشته که با الگوی RegEx مطابقت دارد اقدام میکند و آن را به عنوان مورد مطابقت بازگشت میدهد.
جایگزین متد حریصانه به نام تطبیق تنبل نام دارد که کوتاهترین بخش ممکن را برای رشتهای که الگوی RegEx را تأمین میکند، بازگشت میدهد.
Example-1: "titanic".match(\t[a-z]*i\) returns \\ ["titani"] Example-2: "titanic".match(/t[a-z]*?i/) returns \\ ["ti"] here we have used? to specify lazy match.
کاراکترهای خاص (w, \W, \s, \S, \d, \D\)
در اینجا برخی از کاراکترهای خاص را مورد بررسی قرار میدهیم.
- برای تطبیق همه اعداد و حروف در جاوا اسکریپت از کاراکتر w\ استفاده میکنیم که معادل یک RegEx به صورت [_A-za-z0–9]\ است.
- برای رد کردن همه اعداد و حروف از کاراکتر W\ استفاده میکنیم.
- برای تطبیق صرف ارقام از d\ استفاده میکنیم.
- برای تطبیق نیافتن هیچ رقم از D\ استفاده میکنیم.
- از کاراکتر s\ برای تطبیق با فضاهای خالی استفاده میشود.
- کاراکتر S\ نیز برای رد کردن همه فضاهای خالی مورد استفاده قرار میگیرند.
بازه
برای تطبیق ظهور یک حرف در یک بازه خاص از {} استفاده میکنیم.
Example: "aaaaapple".test(\a{3,5}\); //returns true. 3 and 5 are the minimum and maximum number of times a should be present in the string.
بدین ترتیب به پایان این مقاله میرسیم. امیدواریم که از این راهنمای فشرده RegEx در جاوا اسکریپت بهره برده باشید.
اگر این مطلب برای شما مفید بوده است، آموزشهای زیر نیز به شما پیشنهاد میشوند:
- مجموعه آموزشهای JavaScript (جاوا اسکریپت)
- آموزش JavaScript ES6 (جاوااسکریپت)
- مجموعه آموزشهای برنامهنویسی
- راهنمای سریع Regex — فهرست کاربردی
- معرفی ویژگی های ES10 – راهنمای کاربردی
==
پرچم m را فراموش کردین لطفا در مورد آن هم توضیح دهید
خیلی ممنون از این مقاله ساده و زیباتون. لطفا بازم در مورد Regex در جاوااسکریپت بیشتر و پرمثال تر مقاله بنویسید. ممنون