MATIN MOLKARA
SERIES: JavaScript — PART 72 OF 108

72- آموزش جاوااسکریپت | قسمت سوم - مجموعه‌کاراکترها، بازه‌ها و گروه‌بندی در Regex

در این آموزش با مجموعه‌کاراکترها در Regex آشنا می‌شویم؛ یاد می‌گیریم با براکت‌ها چند گزینه را تعریف کنیم، بازه‌های حروف و اعداد بسازیم، از quantifierها استفاده کنیم و با پرانتزها گروه‌بندی انجام دهیم.

در این بخش از آموزش عبارات باقاعده، وارد مرحله‌ای کاربردی‌تر می‌شویم و با مجموعه‌کاراکترها (Character Sets)، بازه‌ها (Ranges)، کوانتیفایرها (Quantifiers) و گروه‌بندی (Grouping) آشنا می‌شویم.

برای اینکه تست الگوها ساده‌تر شود، ابتدا یک تابع کمکی می‌سازیم تا نتیجه را به‌صورت خوانا در کنسول نمایش دهد:

function reTest(re, str) {
  if (re.test(str)) {
    console.log(`${str} matches ${re.source}`);
  } else {
    console.log(`${str} does not match ${re.source}`);
  }
}

مجموعه‌کاراکترها با براکت

اگر بخواهیم یک بخش از الگو فقط یکی از چند کاراکتر مشخص باشد، از براکت استفاده می‌کنیم.
مثلاً در واژه‌هایی مثل gray و grey، حرف وسط می‌تواند a یا e باشد:

let re = /gr[ae]y/i;

reTest(re, 'gray'); // matches
reTest(re, 'grey'); // matches
reTest(re, 'gryy'); // does not match

در این حالت، عبارت داخل براکت یعنی:

  • این جایگاه فقط می‌تواند یکی از کاراکترهای داخل براکت باشد.

مجموعه‌کاراکتر در ابتدای الگو

براکت فقط برای وسط کلمه نیست. می‌توان از آن در ابتدای الگو هم استفاده کرد.
مثلاً اگر بخواهیم رشته با G یا F شروع شود:

let re = /^[GF]ray/i;

reTest(re, 'Gray'); // matches
reTest(re, 'Fray'); // matches
reTest(re, 'Xray'); // does not match

اگر فلگ i را حذف کنیم، الگو به حروف بزرگ و کوچک حساس می‌شود:

let re = /^[GF]ray/;

reTest(re, 'Gray'); // matches
reTest(re, 'gray'); // does not match

منفی کردن مجموعه‌کاراکترها

اگر ^ را داخل براکت قرار دهیم، معنی آن برعکس می‌شود؛ یعنی: هر کاراکتری به‌جز موارد داخل براکت

let re = /[^GF]ray/i;

reTest(re, 'Xray'); // matches
reTest(re, 'Gray'); // does not match
reTest(re, 'Fray'); // does not match

نکته مهم:

  • ^ بیرون از براکت یعنی «شروع با»
  • ^ داخل براکت یعنی «به‌جز این‌ها»

بازه‌ها (Ranges)

برای ساده‌تر نوشتن الگوها، می‌توان از بازه استفاده کرد.
مثلاً برای هر حرف بزرگ:

let re = /[A-Z]ray/;

reTest(re, 'Xray'); // matches
reTest(re, 'Gray'); // matches
reTest(re, 'xray'); // does not match

برای هر حرف کوچک:

let re = /[a-z]ray/;

reTest(re, 'xray'); // matches
reTest(re, 'Xray'); // does not match

برای هر حرف، چه بزرگ و چه کوچک:

let re = /[A-Za-z]ray/;

reTest(re, 'Xray'); // matches
reTest(re, 'xray'); // matches

برای اعداد:

let re = /[0-9]ray/;

reTest(re, '1ray'); // matches
reTest(re, 'xray'); // does not match

همچنین می‌توان چند رقم پشت‌سرهم را هم بررسی کرد:

let re = /[0-9][0-9]ray/;

reTest(re, '10ray'); // matches
reTest(re, '4ray');  // does not match

کوانتیفایرها با آکولاد

اگر بخواهیم یک کاراکتر چند بار تکرار شود، به‌جای تکرار دستی از آکولاد استفاده می‌کنیم.

تکرار دقیق

مثلاً l باید دقیقاً 2 بار تکرار شود:

let re = /hel{2}o/i;

reTest(re, 'hello');  // matches
reTest(re, 'helo');   // does not match
reTest(re, 'helllo'); // does not match

تکرار بازه‌ای

مثلاً l باید بین 2 تا 4 بار تکرار شود:

let re = /hel{2,4}o/i;

reTest(re, 'hello');    // matches
reTest(re, 'helllo');   // matches
reTest(re, 'hellllo');  // matches
reTest(re, 'helo');     // does not match

تکرار حداقل

اگر فقط عدد اول را بنویسیم، یعنی آن کاراکتر باید حداقل آن تعداد تکرار شود:

let re = /hel{2,}o/i;

reTest(re, 'hello');       // matches
reTest(re, 'hellllo');     // matches
reTest(re, 'helo');        // does not match

گروه‌بندی با پرانتز

پرانتزها برای گروه‌بندی به کار می‌روند.
این کار بیشتر زمانی مفید است که بخواهیم یک بخش چندکاراکتری را با کوانتیفایر کنترل کنیم.

مثلاً اگر بخواهیم الگو به صورت 3x3x3x تکرار شود:

let re = /^([0-9]x){3}$/;

reTest(re, '3x3x3x');   // matches
reTest(re, '3x3x3x3x'); // does not match
reTest(re, '3x3x');     // does not match

در این مثال:

  • ([0-9]x) یک گروه است
  • {3} یعنی این گروه باید 3 بار تکرار شود
  • ^ و $ هم تضمین می‌کنند که کل رشته دقیقاً مطابق الگو باشد

جمع‌بندی

در این بخش یاد گرفتیم:

  • با براکت چند کاراکتر مجاز را تعریف کنیم
  • با ^ داخل براکت، الگو را منفی کنیم
  • از بازه‌ها برای تعریف حروف و اعداد استفاده کنیم
  • با آکولاد تعداد تکرار را مشخص کنیم
  • با پرانتز بخش‌های چندکاراکتری را گروه‌بندی کنیم

در بخش بعدی، سراغ شورت‌هند کاراکتر کلاس‌ها می‌رویم؛ مثل \w، \d و \s که نوشتن الگوها را کوتاه‌تر و حرفه‌ای‌تر می‌کنند.

// 0 comments
#JavaScript#Web Development#Frontend#Grouping#Quantifiers#Ranges#Character Sets#Regular Expressions#Regex

نظرات (0)

نظر خود را بنویسید