مبانی عبارات باقاعده: الگو، Character Class و Quantifier
تا اینجا برای بررسی محتوای رشتهها عمدتاً از متدهایی مثل includes یا startsWith استفاده کردهاید که فقط برای تطبیق دقیق و ساده مناسباند. اما وقتی نیاز باشد الگوهای پیچیدهتری بررسی شوند—مثل معتبر بودن فرمت یک ایمیل یا استخراج تمام اعداد یک متن—عبارات باقاعده (Regular Expressions) ابزار استاندارد و قدرتمند جاوااسکریپت برای این کار هستند.
ساخت یک عبارت باقاعده
عبارت باقاعده در جاوااسکریپت به دو روش قابل تعریف است: با یک literal بین دو اسلش، یا با سازندهی RegExp:
const pattern1 = /hello/;
const pattern2 = new RegExp("hello");
console.log(pattern1.test("hello world")); // true
در عمل، فرم literal بین اسلشها به دلیل خوانایی بیشتر رایجتر است، مگر زمانی که الگو باید بهصورت پویا و از یک متغیر رشتهای ساخته شود که در آن حالت، استفاده از RegExp ضروری میشود.
متد test برای بررسی وجود تطابق
سادهترین کاربرد یک عبارت باقاعده، متد test است که فقط بررسی میکند آیا رشتهی موردنظر با الگو مطابقت دارد یا نه:
Character Class: تعریف مجموعهای از کاراکترهای مجاز
Character Class که داخل براکت [] نوشته میشود، مجموعهای از کاراکترهایی را تعریف میکند که هرکدام از آنها میتواند در آن موقعیت مطابقت داشته باشد:
| الگو | معنی |
|---|---|
| [abc] | یکی از حروف a، b یا c |
| [0-9] | هر رقمی از 0 تا 9 |
| [a-zA-Z] | هر حرف انگلیسی، کوچک یا بزرگ |
| [^0-9] | هر کاراکتری بهجز رقم (علامت ^ در ابتدا یعنی نقیض) |
Character Classهای از پیش تعریفشده
برای مواردی که بسیار رایج هستند، جاوااسکریپت میانبرهایی تعریف کرده که نیازی به نوشتن دستی بازهی کاراکترها نیست:
| میانبر | معادل | معنی |
|---|---|---|
| \d | [0-9] | هر رقم |
| \w | [a-zA-Z0-9_] | هر حرف، رقم یا زیرخط |
| \s | — | هر فاصلهی سفید (space، tab، خط جدید) |
| . | — | هر کاراکتری بهجز خط جدید |
Quantifier: مشخص کردن تعداد تکرار
Quantifier تعیین میکند که یک کاراکتر یا الگو، چند بار میتواند تکرار شود:
| Quantifier | معنی |
|---|---|
| * | صفر یا چند بار |
| + | یک یا چند بار |
| ? | صفر یا یک بار (اختیاری) |
| {n} | دقیقاً n بار |
| {n,m} | حداقل n و حداکثر m بار |
ترکیب Character Class و Quantifier، پایهی ساخت الگوهای عملی است؛ مثلاً برای بررسی اینکه یک رشته دقیقاً از سه تا پنج رقم تشکیل شده باشد:
const shortCode = /^\d{3,5}$/;
console.log(shortCode.test("1234")); // true
console.log(shortCode.test("12")); // false، کمتر از حد مجاز
console.log(shortCode.test("123456")); // false، بیشتر از حد مجاز
نمادهای ^ و $: تعیین ابتدا و انتهای رشته
نماد ^ ابتدای رشته و نماد $ انتهای رشته را مشخص میکند. بدون این دو نماد، الگو میتواند در هر بخشی از رشته مطابقت پیدا کند، نه لزوماً کل رشته:
const exactMatch = /^\d{3}$/; // دقیقاً باید سه رقم و فقط سه رقم باشد
const partialMatch = /\d{3}/; // کافی است در جایی از رشته سه رقم پشت سر هم وجود داشته باشد
console.log(exactMatch.test("12345")); // false
console.log(partialMatch.test("12345")); // true
نکات کلیدی
- عبارت باقاعده با یک literal بین دو اسلش یا سازندهی RegExp تعریف میشود؛ روش دوم برای الگوهای پویا لازم است.
- Character Class، مجموعهای از کاراکترهای مجاز در یک موقعیت مشخص را با استفاده از براکت تعریف میکند.
- میانبرهایی مثل \d، \w و \s، برای رایجترین Character Classها تعریف شدهاند.
- Quantifierهایی مثل *، +، ? و {n,m}، تعداد تکرار مجاز یک کاراکتر یا الگو را مشخص میکنند.
- نمادهای ^ و $ برای تطبیق دقیق کل رشته، نه فقط بخشی از آن، ضروری هستند.
جمعبندی
Character Class و Quantifier، دو بلوک ساختمانی اصلی هر عبارت باقاعده هستند: اولی مشخص میکند چه کاراکترهایی مجازند، و دومی مشخص میکند آن کاراکترها چند بار میتوانند تکرار شوند. ترکیب این دو، همراه با نمادهای ابتدا و انتهای رشته، امکان ساخت الگوهایی دقیق برای اعتبارسنجی و جستوجوی متن را فراهم میکند. در درس بعدی، متدهای عملی کار با عبارات باقاعده مثل match و replace بررسی خواهد شد.
