Sparround

Testçilər üçün regex əsasları

Regular expression (regex) — mətn şablonudur. JavaScript-də iki cür yazılır: literal /şablon/flaqlar və ya new RegExp('şablon', 'flaqlar') (şablon dinamik qurulanda).

Ən lazımlı elementlər:

  • \d rəqəm, \w hərf/rəqəm/alt xətt, \s boşluq; böyük hərfli variantlar (\D, \W, \S) əksini bildirir
  • + bir və ya çox, * sıfır və ya çox, ? sıfır və ya bir
  • {3} dəqiq üç dəfə, {2,4} iki-dörd dəfə
  • ^ sətrin başı, $ sonu — yoxlamanı sərtləşdirən əsas alət
  • [a-z] simvol dəsti, [^abc] istisna
  • ( ) capture group, (?<ad>...) adlandırılmış group, | seçim

Flaqlar: i — reqistrə həssas deyil, g — bütün uyğunluqlar, m — çoxsətirli rejim.

ŞablonNəyi tuturTestdə istifadəsi
/^\d+$/yalnız rəqəmlərdən ibarət tam sətirID və ya say sahəsinin yoxlanması
/\d+/mətnin İÇİNDƏKİ ilk rəqəm qrupu'Order #1042' mətnindən nömrə çıxarmaq
/^[^\s@]+@[^\s@]+\.[a-z]{2,}$/isadə e-poçt formasıgenerasiya olunmuş e-poçtun formatı
/^[0-9a-f]{8}-[0-9a-f]{4}/iUUID-in başlanğıcıAPI-nin qaytardığı id-nin forması
/\s+/gardıcıl boşluq və sətir keçidləriUI mətnini normallaşdırmaq (replace ilə)
/(?<id>\d+)/adlandırılmış capture groupmatch().groups.id ilə oxunaqlı çıxarış

`test()` yoxsa `match()`?

  • regex.test(mətn)true/false. Sadəcə "uyğun gəlirmi?" sualına cavab lazımdırsa bunu seç.
  • mətn.match(regex) → uyğunluq varsa massiv, yoxdursa `null`. g flaqı olmadan: [0] — bütöv uyğunluq, [1], [2] — capture group-lar, .groups — adlandırılmış group-lar. g flaqı ilə: yalnız bütöv uyğunluqların siyahısı, group-lar olmadan.
  • mətn.matchAll(regex) (g ilə) → hər uyğunluğu group-ları ilə birlikdə verən iterator.

match() null qaytardığı üçün nəticəni yoxlamadan [1] oxumaq klassik Cannot read properties of null xətasıdır. Təhlükəsiz forma: mətn.match(re)?.[1] ?? null.

Playwright regex-i birbaşa qəbul edir və bu, dəyişkən mətnlərlə işləməyin ən təmiz yoludur: await expect(page).toHaveURL(/\/dashboard/), await expect(badge).toHaveText(/^\d+ items?$/), page.getByRole('button', { name: /sign in/i }).

Regex nə vaxt artıqdır? Dəyər sabitdirsə (toHaveURL('https://stage.example.com/dashboard')), sadə includes/startsWith kifayət edirsə, ya da şablon o qədər mürəkkəbləşirsə ki, onu oxumaq üçün ayrıca şərh yazmaq lazım gəlir. Prinsip: regex oxunaqlılığı artırdıqda istifadə et, göstəriş nümayiş etdirmək üçün yox — çünki fail olanda komanda yoldaşın onu oxumalı olacaq.

📚 Mənbələr və sənədlər