وقتی که صحبت از رگیولار اکسپرشن به میان میآید، علائم []
تحت عنوان Character Set شناخته میشوند. با این توضیح، فرض کنیم میخواهیم رِجِکسی بنویسیم که با واژگان cat
و mat
مَچ شود اما واژهای همَچون rat
را شامل نگردد که در این صورت خواهیم داشت:
var string = "cat";
var regex = /[cm]at/;
string.match(regex);
این رِجِکس با استرینگ cat
مَچ خواهد شد مضاف بر این که با استرینگ mat
نیز همخوانی دارد اما اگر اسکریپت فوق را به صورت زیر تغییر دهیم:
var string = "rat";
var regex = /[cm]at/;
string.match(regex);
خروجی null
خواهد بود. در تفسیر این رِجِکس باید گفت که اگر بخواهیم طیفی از حروف را هدف قرار دهیم، میباید آنها را داخل علائم []
قرار دهیم. به عبارتی، از آنجا که حرف اول کلمات cat
و mat
به ترتیب c
و m
است، ابتدای رِجِکس خود را با ساختار [cm]
شروع کردهایم بدان معنا که حرف اول استرینگی که قرار است هدف قرار دهیم میتواند یکی از حروف c
و m
باشد. عکس این موضوع را هم میتوانیم در رِجِکس خود بگنجانیم به طوری که برای مثال داریم:
var string = "rat";
var regex = /[^cm]at/;
string.match(regex);
این رِجِکس با استرینگ rat
مَچ میشود چرا که با استفاده از علامت ^
که Caret تلفظ میگردد، دستور دادهایم که حرف اول استرینگ هر چیزی میتواند باشد به جز حروف c
و m
به صورتی اگر مثلاً استرینگ جدیدی همچون nat
را نیز تست کنیم، میبینیم که رِجِکس مذکور با آن همخوانی دارد.
هشدار |
توجه داشته باشیم که علامت ^ حتماً میباید داخل علائم [ ] قرار گیرد و در غیر این صورت نتیجه دلخواه را دریافت نخواهیم کرد. |
به عنوان مثالی دیگر، فرض کنیم به رِجِکسی نیاز داریم که چک کند سه حرف اول استرینگ beh
باشد، دو حرف بعد هر چیزی از حروف الفبا میتواند باشد و حرف آخر هم فقط و فقط میتواند d
باشد که برای این منظور خواهیم داشت:
var string = "behbod";
var regex = /beh[a-z][a-z]d/;
string.match(regex);
در رِجِکس فوق حروف beh
حاکی از آنند که ابتدای استرینگ میباید با این سه حرف شروع شده سپس به اولین [a-z]
میرسیم که دستور میدهد تا حرف چهارم میتواند یکی از حروف الفبا از حرف a
تا z
به صورت کوچک باشد و بر همین منوال [a-z]
دوم پنجمین کاراکتر را مشخص میسازد و در نهایت به حرف d
میرسیم که استرینگ مذکور میباید حتماً به آن ختم شود. علاوه بر استرینگی که مشاهده میشود، استرینگهایی همچون behzad
و behrad
نیز با این رِجِکس مَچ میشوند چرا که سه حرف اول هر دو مورد beh
بوده سپس حروف چهارم و پنجم یکی از حروف الفبا به صورت کوچک بوده و در نهایت هر دو به حرف d
ختم میشوند.
در شرایطی که بخواهیم رِجِکسی بنویسیم که هر چیزی اعم از حروف بزرگ و کوچک و همچنین اعداد را شامل گردد، میتوانیم از ساختار زیر استفاده نماییم:
var string = "A";
var regex = /[A-Za-z0-9]/;
string.match(regex);
در مثال فوق دستور دادهایم تا حرف اول استرینگ یکی از حروف الفبا به صورت بزرگ یا یکی از حروف الفبا به صورت کوچک و یا یکی از اعداد 0 تا 9 باشد. این رِجِکس با استرینگهای A
،g
،U
و همچنین اعدادی همچون 2 یا 8 مَچ میشود اما در عین حال راهکار سادهتری برای نوشتن چنین رِجِکسی وجود دارد که عبارت است از:
var string = "A";
var regex = /\w/;
string.match(regex);
حرف w
برگرفته از Word است و همانطور که پیش از این دیدیم، با قرار دادن علامت \
قبل از آن، این حرف را به اصطلاح Escape کردهایم بدان معنا که منظور خود این حرف نیست بلکه مفهومی است که در رِجِکس به صورت پیشفرض برای این حرف در نظر گرفته شده و آن هم چیزی نیست جز «هر حرفی اعم از بزرگ و کوچک به علاوهٔ اعداد ۰ تا ۹ و همچنین علامت _» و در صورت اجرای این اسکریپت، خروجی همچون نمونهٔ قبل خواهد بود. در عین حال، علامت W\
کاربرد برعکسی خواهد داشت:
var string = "%";
var regex = /\W/;
string.match(regex);
به عبارتی، W\
بدان معنا است که چیزهایی همچون اِسپیس، علائم خاص و ... هدف قرار داده شده اما حروف و اعداد نادیده گرفته خواهند شد.