عبارات منظم یا Regular Expressions زبانی کوچک برای توصیف الگوهای متنی هستند. فرض کنید میخواهید بررسی کنید کاربر یک ایمیل معتبر وارد کرده یا نه، یا همه اعداد را از یک متن استخراج کنید؛ بدون Regex مجبور میشدید دهها خط کد بنویسید، اما با آن این کارها در یک خط انجام میشود. در این مقاله از صفر شروع میکنیم و قدمبهقدم جلو میرویم.
ساخت اولین Regex
در جاوااسکریپت دو راه برای ساخت عبارت منظم وجود دارد: سینتکس مستقیم بین دو اسلش که رایجتر است، یا سازنده RegExp. متد test بررسی میکند که آیا الگو در متن وجود دارد یا نه:
const pattern = /جاوااسکریپت/;
console.log(pattern.test("من جاوااسکریپت دوست دارم")); // true
console.log(pattern.test("من پایتون دوست دارم")); // false
کلاسهای کاراکتری پرکاربرد
بهجای نوشتن یک حرف مشخص، میتوان یک دسته کامل از کاراکترها را تعیین کرد. مهمترین آنها d\ یعنی هر رقم، w\ یعنی هر حرف یا رقم انگلیسی و s\ یعنی فاصله خالی است. حروف بزرگ آنها معنی برعکس میدهد:
const phoneRegex = /^\d{11}$/; // دقیقاً 11 رقم
console.log(phoneRegex.test("09123456789")); // true
console.log(phoneRegex.test("0912abc")); // false
const spaceRegex = /\s/;
console.log(spaceRegex.test("سلام دنیا")); // true چون فاصله دارد
لنگرها و تکرارها
علامت ^ یعنی ابتدای رشته و $ یعنی انتهای رشته؛ این دو را لنگر مینامند و برای اعتبارسنجی کامل یک ورودی ضروریاند. برای مشخص کردن تعداد تکرار هم از { } استفاده میکنیم؛ مثلاً {4} یعنی دقیقاً چهار بار و + یعنی یک بار یا بیشتر:
const postalCode = /^\d{10}$/; // کد پستی 10 رقمی
const hasDigits = /\d+/; // حداقل یک رقم پیدا شود
console.log(postalCode.test("1234567890")); // true
console.log(hasDigits.test("کد 123 آمد")); // true
محصول اورجینال INZIP
دانلود پوسته وردپرس باریستا؛ قالب کافیشاپ، رُستری قهوه و فروشگاه قهوه دوزبانه با منوی رومیزی، رزرو آنلاین میز با کد پیامکی و ووکامرس. طراحی اختصاصی inzip.ir
تحویل آنی
آپدیت رایگان
بدون قفل لایسنس
پشتیبانی واقعی
٪۲۶
تخفیف ویژه
۱,۰۳۰,۰۰۰ تومان
اعتبارسنجی ایمیل
نمونه کلاسیک کاربرد Regex، بررسی ساختار ایمیل است. الگوی زیر یک بررسی پایه انجام میدهد: بخشی از حروف و ارقام، علامت @، نام دامنه و پسوند آن:
const emailRegex = /^[\w.]+@[\w]+\.[a-z]{2,}$/i;
console.log(emailRegex.test("user@example.com")); // true
console.log(emailRegex.test("userexample.com")); // false
حرف i در انتهای الگو یک Flag است و باعث میشود جستجو به بزرگی و کوچکی حروف حساس نباشد. پرکاربردترین Flagها عبارتاند از i برای عدم حساسیت به حروف و g برای یافتن همه موارد بهجای اولین مورد.
استخراج اطلاعات با match
متد match نتایج مطابق الگو را بهصورت آرایه برمیگرداند. با استفاده از Flag سراسری g میتوانید همه موارد را یکجا استخراج کنید:
const text = "قیمت اول 2500 و قیمت دوم 4800 تومان است";
const numbers = text.match(/\d+/g);
console.log(numbers); // ["2500", "4800"]
جایگزینی هوشمند با replace
ترکیب replace با Regex امکان جایگزینی الگوها را میدهد، نه فقط متنهای ثابت. مثلاً میتوانیم همه اعداد یک متن را حذف کنیم یا فاصلههای اضافی را یکی کنیم:
const dirty = "قیمت2500تومان";
console.log(dirty.replace(/\d+/g, "*")); // قیمت*تومان
const spaced = "سلام دنیا";
console.log(spaced.replace(/\s+/g, " ")); // سلام دنیا
نکات مهم برای شروع
Regex در نگاه اول ترسناک است اما با تمرین ساده میشود. توصیه میکنیم الگوهای پیچیده را مرحلهبهمرحله بسازید و هر بخش را جداگانه تست کنید. ابزارهای آنلاین تست Regex هم نقشی مانند آزمایشگاه دارند و نتیجه را همزمان نشان میدهند. همچنین به خاطر داشته باشید نیازی نیست همه چیز را با Regex حل کنید؛ گاهی یک includes ساده کار را راه میاندازد.
جمعبندی
عبارات منظم ابزاری قدرتمند برای اعتبارسنجی فرمها، جستجو و استخراج داده از متن هستند. در این مقاله با ساختار کلی، کلاسهای کاراکتری، لنگرها، تکرارها و متدهای test، match و replace آشنا شدید. حالا میتوانید اعتبارسنجیهای حرفهای برای شماره موبایل، کد ملی و ایمیل بنویسید.