Regex Yoxlayıcısı

Oflayn işləyirHeç nə yüklənmirPulsuz, qeydiyyatsız

Requlyar ifadəni mətninizdə canlı işıqlandırma, nömrəli və adlı qruplar və əvəzləmə önizləməsi ilə yoxlayın — JavaScript-in öz mühərriki ilə və faciəvi geri dönüşlə donan nümunələr üçün söndürmə açarı ilə: səhifə heç vaxt donmur.

Nümunə dili üçün oxu cədvəli

ParçaMənasıQeyd
\d \w \srəqəm, söz simvolu, boşluqböyük hərflər inkar edir: \D qeyri-rəqəmdir
+ * ?bir və çox, sıfır və çox, istəyə bağlıtənbəl variant üçün sonuna ?
{2,5}ikidən beşə qədər təkrar{2,} — iki və çox
[abc] [^abc]bunlardan biri, heç biri[a-z0-9] kimi aralıqlar
(x) (?:x) (?<n>x)tutma, tutmayan qrup, adlı tutmaqiymət lazım deyilsə (?:) seçin
^ $ \bbaşlanğıc, son, söz sərhədim ilə — hər sətirdə
(?=x) (?!x)ardınca gələn, gəlməyənsıfır enli — heç nə udmurlar

Regex baqlarının çoxunun qarşısını alan iki vərdiş

Nəzərdə tutduğunuzu lövbərləyin. Lövbərsiz nümunə mətnin istənilən yerində uyğun gəlir: \d{4} on altı rəqəmli kart nömrəsinin içində dörd rəqəmi məmnuniyyətlə tapır. Yoxlama nümunələri demək olar həmişə ətrafında ^…$ istəyir. Yapışdırdığınızı ekranlayın. On dörd simvol operatordur; domen adındakı nöqtə və telefon nömrəsindəki plyus \. və \+ yazılmasa nümunənin mənasını səssizcə dəyişir.

Uyğunlaşdırma yerli worker axınında gedir; nə nümunə, nə mətn brauzerinizdən çıxmır.

Tez-tez verilən suallar

Bu hansı regex dialektidir?

Tam olaraq JavaScript-inki — alət nümunənizi brauzerin öz mühərrikindən keçirir; burada uyğun gələn kodunuzda, Node skriptlərində və brauzer DevTools-da da uyğun gələcək. Sintaksisin çoxu PCRE ilə ortaqdır, amma lookbehind dəstəyi, \p{…} sinifləri (u bayrağı ilə) və adlı qruplar məhz ECMAScript standartına uyğundur.

Bayraqlar nə edir?

g birincini yox, hər uyğunluğu tapır; i böyük-kiçik hərfə baxmır; m ^ və $-ı yalnız mətnin uclarında yox, hər sətir sınığında işlədir; s nöqtəyə yeni sətirdən keçməyə imkan verir; u kod-nöqtə rejiminə keçir — bir emoji bir simvol olur və \p{Letter} sinifləri işləyir. Bayraq kombinasiyası nümunənin mənasının hissəsidir: eyni ifadə m ilə və m-siz tamam fərqli şeylərə uyğun gələ bilər.

Alət nümunəmi niyə iki saniyədən sonra dayandırdı?

Faciəvi geri dönüş (catastrophic backtracking): (a+)+$ kimi nümunə uzun a-lar zənciri üstəgəl bir b-də mühərriki uğursuzluğa qərar verməzdən əvvəl a-ları bölməyin eksponensial sayda yolunu sınamağa məcbur edir. Alət uyğunlaşdırmanı ayrıca axında işlədir və iki saniyədən sonra öldürür — istehsalat kodunuzda eyni nümunə sadəcə asılıb qalardı; bu, əsl xidmətdən-imtina sinfidir (ReDoS). Çarə strukturu dəyişməkdir ki, alternativlər eyni mətni yenidən bölə bilməsin: (a+)+ kimi iç-içə kvantifikatorları tək a+ ilə əvəz edin, üst-üstə düşən vayldkardlar əvəzinə açıq simvol sinifləri işlədin.

Boş uyğunluq nədir və niyə hər mövqedə çıxır?

Sıfır simvola uyğun gələ bilən nümunə — a*, \b, (?=x) — heç nə udmadan uğur qazanır; g bayrağı ilə tətbiq olunduğu hər mövqedə bir dəfə uğur qazanır. Alət bunları nazik kursor xətti ilə işarələyir. Onlar qanunidir (lookahead-lər və lövbərlər belə işləyir), amma çox vaxt kvantifikatorun * yox, + olmalı olduğuna işarədir.

Tutulan qrupları əvəzləmədə necə işlədim?

Əvəzedici xanası String.replace sintaksisi ilə danışır: nömrəli qruplar üçün $1–$9, adlılar üçün $<ad>, bütöv uyğunluq üçün $&, hərfi dollar üçün $$. İştirak etməyən qrup boş sətir kimi əvəzlənir — qruplar sütununda tire ilə görünür.

Mətnim və ya nümunəm hara yüklənir?

Heç yerə — uyğunlaşdırma tamamilə brauzerinizdə, öz maşınınızdakı worker axınında gedir. Loq sətirləri, konfiq faylları və nümunə yoxlanan digər mətnlər məhz səyahət etməməli datadır; burada heç vaxt etmir.

Oxşar alətlər