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:
\drəqəm,\whərf/rəqəm/alt xətt,\sboş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.
| Şablon | Nəyi tutur | Testdə istifadəsi |
|---|---|---|
| /^\d+$/ | yalnız rəqəmlərdən ibarət tam sətir | ID 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,}$/i | sadə e-poçt forması | generasiya olunmuş e-poçtun formatı |
| /^[0-9a-f]{8}-[0-9a-f]{4}/i | UUID-in başlanğıcı | API-nin qaytardığı id-nin forması |
| /\s+/g | ardıcıl boşluq və sətir keçidləri | UI mətnini normallaşdırmaq (replace ilə) |
| /(?<id>\d+)/ | adlandırılmış capture group | match().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`.gflaqı olmadan:[0]— bütöv uyğunluq,[1],[2]— capture group-lar,.groups— adlandırılmış group-lar.gflaqı ilə: yalnız bütöv uyğunluqların siyahısı, group-lar olmadan.mətn.matchAll(regex)(gilə) → 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
- Müntəzəm ifadələrrəsmideveloper.mozilla.org