Regex tester
Şablonu yazın, lazım olan bayraqları seçin və mətni yapışdırın: yazdıqca hər uyğunluq vurğulanır və mövqeyi və tutma qrupları ilə birlikdə siyahıda göstərilir. Şablon brauzerinizin öz JavaScript regex mühərrikində işləyir, buna görə nəticələr kodunuzla üst-üstə düşür və mətn cihazınızda qalır.
0 simvol · 0 söz · 0 sətir
Uyğunluqlar burada vurğulanır.0 simvol · 0 söz · 0 sətir
Tamamilə bu brauzer səkməsində işləyir. Mətniniz heç vaxt yüklənmir və saxlanmır.
JavaScript regex tokenləri
İlk uyğunluq sütunu hər şablonun öz mətni üzərində bu səhifəni quran JavaScript mühərriki ilə işə salınması nəticəsində alınıb.
| Token | Mənası | Şablon | Mətn | İlk uyğunluq |
|---|---|---|---|---|
\d | Rəqəm 0–9 | /\d+/ | Order 66 shipped | 66 |
\w | Hərf, rəqəm və ya alt xətt (ASCII) | /\w+/ | snake_case-id | snake_case |
\s | Boşluq simvolu, tab və sətir keçidləri daxil | /\s+/ | two spaces | |
. | Sətir keçidindən başqa istənilən simvol (s olmasa) | /a.c/ | abc a-c | abc |
^ $ | Girişin (və ya m ilə sətrin) başlanğıcı və sonu | /^\w+$/ | single | single |
[abc] | Sadalanan simvollardan biri | /[aeiou]/ | rhythm and blues | a |
[^abc] | Sadalanmayan istənilən simvol | /[^0-9]+/ | 2026-10-18 | - |
* + ? | 0 və ya daha çox, 1 və ya daha çox, 0 və ya 1 | /colou?r/ | color colour | color |
{n,m} | n ilə m dəfə arası | /\d{2,4}/ | 7 42 1999 123456 | 42 |
(…) | Tutan qrup | /(\d+)px/ | width: 320px | 320px |
(?<name>…) | Adlandırılmış tutan qrup | /(?<h>\d\d):(?<m>\d\d)/ | at 09:45 | 09:45 |
(?:…) | Tutmayan qrup | /(?:ab)+/ | ababab! | ababab |
a|b | İki tərəfdən biri | /cat|dog/ | hotdog | dog |
\b | Söz sərhədi | /\bcat\b/ | concat cat | cat |
(?=…) | Ardınca gəlir (lookahead) | /\d+(?=%)/ | 50 of 75% | 75 |
(?<!…) | Əvvəlində gəlmir (negative lookbehind) | /(?<!\$)\b\d+/ | $30 or 40 | 40 |
\p{L} | İstənilən Unicode hərfi (u lazımdır) | /\p{L}+/u | naïve 東京 | naïve |
Altı bayraq və onların nəyi dəyişdirdiyi
g (global) ilk uyğunluqda dayanmaq əvəzinə bütün uyğunluqları tapır; onsuz siyahıda yalnız bir element olur. i hərf registrini nəzərə almır. m (multiline) ^ və $ simvollarını bütün mətnin deyil, hər sətrin əvvəlində və sonunda uyğunlaşdırır; sonundakı boşluqlar kimi nümunələr üçün məhz bu lazımdır. s (dotAll, ES2018-də əlavə olunub) . simvolunun sətir keçidlərinə də uyğun gəlməsinə imkan verir. u (unicode) mətnə kod nöqtələri kimi baxır, ona görə emoji bir simvol sayılır, həmçinin istənilən yazıdakı istənilən hərf üçün \p{L} kimi xassə ardıcıllıqlarını aktivləşdirir. y (sticky) yalnız cari mövqedə dəqiq uyğunlaşır; tokenizatorlar bu rejimdən istifadə edir. JavaScript-də uyğunluq indeksləri üçün d, sinifdə çoxluq əməliyyatları üçün v bayrağı da var; bu test aləti yuxarıdakı altı bayraqla məhdudlaşır.
Test mətninin altında hər uyğunluq öz indeksi və qrupları ilə göstərilir. Nömrələnmiş qruplar adi mötərizələrdən yaranır, (?:…) tutmadan qruplaşdırır, (?<year>\d{4}) isə adlı qrup yaradır və ISO tarix nümunəsində göründüyü kimi adı ilə görünür. Ümumi nümunələr menyusu e-poçt ünvanları, URL-lər, IPv4 ünvanları, hex rənglər, UUID-lər, təkrarlanan sözlər və sondakı boşluqlar üçün sınaqdan keçmiş başlanğıc nöqtələri əlavə edir. E-poçt nümunəsinə yoxlama kimi yox, ilkin sınaq kimi yanaşın: tam ünvan qrammatikası daha genişdir və yeganə real yoxlama mesaj göndərməkdir.
Lookbehind və fəlakətli geri qayıtma (backtracking)
Lookaround konstruksiyaları mövqeyi istehlak etmədən onun ətrafını yoxlayır. Lookahead, yəni (?=…) və (?!…), həmişə JavaScript-in bir hissəsi olub; lookbehind, yəni (?<=…) və (?<!…), ES2018-də gəldi və Safari 16.4 onu 2023-də təqdim edəndə bütün əsas brauzerlərə çatdı. Beləliklə, (?<=\$)\d+ "$42" mətnində dollar işarəsini daxil etmədən 42-ni tapır. Bir çox digər mühərrikdən fərqli olaraq, JavaScript istənilən uzunluqda lookbehind-ə icazə verir.
JavaScript mühərriki geri izləmə (backtracking) üsulu ilə işləyir: yol alınmayanda geri qayıdıb alternativləri yoxlayır. (a+)+$ kimi içiçə kvantifikatorlar eyni mətni bölməyin eksponensial sayda yolunu yaradır, ona görə 30 ədəd a-dan sonra x gələn sətir saniyələr, bir neçə hərf artıq olsa saatlar çəkə bilər. Bu, katastrofik geri izləmədir, serverlərdə isə ReDoS, yəni xidmətdən imtina hücumuna çevrilir; belə qüsurlu tək bir WAF qaydası 2 iyul 2019-da Cloudflare şəbəkəsini təxminən yarım saat çökdürdü. Bu test aləti sizin tabda işlədiyi üçün belə nümunə səhifəni dondura bilər; səhifəni yeniləyin və nümunəni elə yenidən yazın ki, iki kvantifikator eyni simvolları tuta bilməsin: .* əvəzinə [^,]* kimi daha dar siniflərdən və ya lövbərlərdən istifadə edin. Mətnin özünü uyğunlaşdırmaq yox, redaktə etmək üçün mətn alətlərinə baxın; daha çox developer utilitləri developer alətləri bölməsindədir.
Tez-tez verilən suallar
- Regex niyə yalnız bir uyğunluq tapır?
- g bayrağı söndürülüb. Onsuz mühərrik ilk uyğunluqdan sonra dayanır. Bütün tapıntıları görmək üçün g işarələyin; təkcə y bayrağı da bir neçəsini tapır, lakin yalnız onlar bir-birinin ardınca gələndə.
- JavaScript-də \d başqa yazı sistemlərinin rəqəmlərinə uyğun gəlirmi?
- Xeyr. JavaScript-də \d yalnız 0-dan 9-a qədər rəqəmləri, \w isə yalnız ASCII hərflərini, rəqəmləri və alt xətti bildirir, hətta u bayrağı ilə də. Digər yazılar üçün u ilə \p{Nd} və ya \p{L} istifadə edin.
- Burada yoxlanılan şablon Python və ya PHP-də eyni işləyəcəkmi?
- Əsas sintaksis keçir, amma təfsilatlar fərqlidir: Python-da adlı qruplar
(?P<name>…)kimi yazılır, PHP və Python JavaScript-də olmayan possessive kvantifikatorları dəstəkləyir, lookbehind qaydaları da dəyişir. Hədəf mühərrikdə yenidən sınayın. - Adi nöqtəni və ya mötərizəni necə tapmaq olar?
- Onun qarşısına tərs slaş qoyun:
\.nöqtəyə,\[açılan mötərizəyə uyğun gəlir. Simvol sinfinin içərisində əksər simvollar onsuz da hərfi mənadadır, ona görə[.]da yalnız nöqtəyə uyğun gəlir. - Şablonu yazarkən səhifə niyə dondu?
- Nümunə, ehtimal ki, mətninizdə katastrofik geri izləməyə səbəb olub. Səhifəni yeniləyin, sonra
(.*)*və ya(a+)+kimi içiçə kvantifikatorlardan çəkinin və hər hissənin mümkün qədər az simvola uyğun gəlməsini təmin edin.