MATIN MOLKARA
SERIES: JavaScript — PART 73 OF 108

73- آموزش جاوااسکریپت | قسمت چهارم - کاراکترهای شورت‌هند و Assertionها در Regex

در این آموزش با کاراکترهای شورت‌هند Regex مثل `\w`، `\d` و `\s` آشنا می‌شویم و یاد می‌گیریم چگونه با `\b` و lookaheadها الگوهای دقیق‌تری بسازیم.

متن اصلی

در این بخش از آموزش عبارات باقاعده، سراغ شورت‌هند کاراکتر کلاس‌ها و Assertionها می‌رویم. این ابزارها نوشتن الگوها را کوتاه‌تر، خواناتر و دقیق‌تر می‌کنند.

برای تست الگوها، از یک تابع کمکی استفاده می‌کنیم:

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

کاراکتر شورت‌هند \w

\w مخفف Word Character است و هر کاراکتر کلمه‌ای را match می‌کند:

  • حروف
  • اعداد
  • underscore _
let re = /\w+/;

reTest(re, 'hello');     // matches
reTest(re, 'hello123');   // matches
reTest(re, 'hello_123');  // matches
reTest(re, '!@#');        // does not match
reTest(re, 'hello world'); // matches

در این مثال، + یعنی «یک یا بیشتر»؛ بنابراین Regex تمام بخش‌های کلمه‌ای را پیدا می‌کند.


کاراکتر شورت‌هند \W

\W نسخه معکوس \w است و هر چیزی به‌جز کاراکتر کلمه‌ای را match می‌کند.

let re = /\W+/;

reTest(re, '!');      // matches
reTest(re, ' ');      // matches
reTest(re, '@#$');    // matches
reTest(re, 'hello');  // does not match
reTest(re, '123');    // does not match

کاراکتر شورت‌هند \d

\d یعنی هر رقم از 0 تا 9.

let re = /\d+/;

reTest(re, '3');        // matches
reTest(re, '12345');    // matches
reTest(re, 'abc123');   // matches
reTest(re, 'abc');      // does not match

کاراکتر شورت‌هند \D

\D یعنی هر چیزی به‌جز رقم.

let re = /\D+/;

reTest(re, 'abc');      // matches
reTest(re, '!@#');      // matches
reTest(re, 'abc123');   // matches
reTest(re, '123');      // does not match

کاراکتر شورت‌هند \s

\s برای فضای خالی است؛ مثل:

  • فاصله
  • tab
  • line break
let re = /\s+/;

reTest(re, 'hello world'); // matches
reTest(re, 'hello\tworld'); // matches
reTest(re, 'helloworld');   // does not match

کاراکتر شورت‌هند \S

\S نسخه معکوس \s است و هر چیزی به‌جز فضای خالی را match می‌کند.

let re = /\S+/;

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

مرز کلمه \b

\b برای مرز کلمه استفاده می‌شود.
این کاراکتر خودش متن را match نمی‌کند، بلکه محل شروع یا پایان یک کلمه را بررسی می‌کند.

let re = /\bhell\b/i;

reTest(re, 'hell');              // matches
reTest(re, 'hello');             // does not match
reTest(re, 'well, hell there');   // matches

در این مثال:

  • hell به‌عنوان یک کلمه مستقل match می‌شود
  • اما داخل hello match نمی‌شود، چون مرز کلمه ندارد

Assertionها و Lookahead

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

Positive Lookahead: (?=...)

یعنی: این بخش فقط وقتی match شود که بعد از آن، الگوی مشخص‌شده وجود داشته باشد.

let re = /x(?=y)/;

reTest(re, 'xy');   // matches
reTest(re, 'xz');   // does not match
reTest(re, 'x');    // does not match

در این حالت:

  • x باید وجود داشته باشد
  • بعد از آن حتماً y بیاید

Negative Lookahead: (?!...)

یعنی: این بخش فقط وقتی match شود که بعد از آن، الگوی مشخص‌شده وجود نداشته باشد.

let re = /x(?!y)/;

reTest(re, 'xy');   // does not match
reTest(re, 'xz');   // matches
reTest(re, 'x');    // matches

جمع‌بندی

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

  • \w برای کاراکترهای کلمه‌ای
  • \W برای کاراکترهای غیرکلمه‌ای
  • \d برای اعداد
  • \D برای غیرعدد
  • \s برای فضای خالی
  • \S برای غیر فضای خالی
  • \b برای مرز کلمه
  • (?=...) برای lookahead مثبت
  • (?!...) برای lookahead منفی

در بخش بعدی، از این مفاهیم در یک فرم واقعی استفاده می‌کنیم تا اعتبارسنجی ورودی‌ها را با Regex انجام دهیم.

// 0 comments
#JavaScript#Web Development#Assertions#Lookahead#Shorthand Character Classes#Regular Expressions#Regex

نظرات (0)

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