70- آموزش جاوااسکریپت | قسمت اول -آشنایی با عبارات باقاعده (Regular Expressions) و متدهای ارزیابی آنها
در این آموزش با مفهوم عبارات باقاعده (Regex) آشنا شده و ۵ متد اصلی جاوااسکریپت برای کار با آنها یعنی exec، test، match، search و replace را به همراه فلگهای مهم بررسی میکنیم.
عبارات باقاعده یا Regular Expressions (به اختصار Regex) الگوهایی هستند که برای جستجو، تطبیق و استخراج رشتههای متنی به کار میروند. این ابزار در اکثر زبانهای برنامهنویسی وجود دارد و در مواردی مانند اعتبارسنجی فرمها (ایمیل، شماره تماس و...) بسیار کاربردی است.
در این بخش، بهجای درگیر شدن با کاراکترهای پیچیده، ابتدا با نحوه تعریف یک عبارت باقاعده و متدهای ارزیابی آن در جاوااسکریپت آشنا میشویم.
تعریف یک عبارت باقاعده
در جاوااسکریپت، یک عبارت باقاعده معمولاً بین دو علامت اسلش (/) قرار میگیرد که به آن "Literal" میگویند:
let re;
re = /hello/; // تعریف الگوی کلمه hello
re = /hello/i; // i = flag (حساس نبودن به حروف کوچک و بزرگ)
- re.source: متن داخل اسلشها را برمیگرداند.
متدهای ارزیابی عبارات باقاعده
۱. متد exec()
این متد الگو را در یک رشته جستجو میکند. اگر مطابقت پیدا شود، یک آرایه شامل اطلاعات زیر و در غیر این صورت مقدار null برمیگرداند:
- مقدار مطابقت یافته
- ایندکس (موقعیت) شروع مطابقت
- رشته ورودی اصلی
const re = /hello/i;
const result = re.exec('hello world');
console.log(result);
// ['hello', index: 0, input: 'hello world']
۲. متد test()
این متد بسیار ساده است؛ اگر الگو در رشته پیدا شود مقدار true و در غیر این صورت false برمیگرداند.
const re = /hello/i;
const result = re.test('Hello');
console.log(result); // true
فلگهای مهم (Flags)
- i (Case Insensitive): باعث میشود جستجو به حروف کوچک و بزرگ حساس نباشد.
- g (Global): جستجو را در تمام متن انجام میدهد (فقط اولین مورد را پیدا نمیکند، بلکه همه موارد را در نظر میگیرد).
متدهای رشته (String Methods) برای Regex
برخلاف دو متد قبلی که روی خودِ عبارت باقاعده اجرا میشدند، متدهای زیر روی "رشته" اجرا میشوند و الگو را به عنوان ورودی میگیرند.
۳. متد match()
عملکردی شبیه به exec دارد و نتایج مطابقت را در قالب یک آرایه برمیگرداند.
const str = 'Hello There';
const re = /hello/i;
const result = str.match(re);
console.log(result); // ['Hello', index: 0, input: 'Hello There']
۴. متد search()
ایندکس اولین مورد پیدا شده را برمیگرداند. اگر موردی پیدا نشود، مقدار -1 برمیگرداند (مشابه indexOf).
const str = 'Brad hello there';
const re = /hello/i;
const result = str.search(re);
console.log(result); // 5
۵. متد replace()
رشته جدیدی را برمیگرداند که در آن، الگوی مورد نظر با یک رشته دیگر جایگزین شده است.
const str = 'Hello There';
const re = /hello/i;
const newStr = str.replace(re, 'Hi');
console.log(newStr); // "Hi There"
نتیجهگیری
در این بخش آموختیم که چگونه یک الگوی ساده بسازیم و با استفاده از متدهای مختلف، وجود آن را در متنهای دیگر بررسی کنیم. در بخشهای بعدی، با کاراکترهای خاص (Meta Characters) آشنا میشویم که قدرت واقعی عبارات باقاعده را در فیلتر کردن متنهای پیچیده نشان میدهند.