Giriş
Müntəzəm ifadələr, tez-tez "regex" və ya "regexp" adlanır, developerin alət qutusundakı ən güclü alətlərdən biridir. Onlar inanılmaz dəqiqlik ilə mətn axtarmağa, uyğunlaşdırmağa və manipulyasiya etməyə imkan verir. Ancaq bir çox developerlər regex-i qorxuducu hesab edir, onun şifrəli sintaksisi və görünən sehrli qabiliyyətləri ilə.
Bu bələdçi müntəzəm ifadələri praktik, real dünya nümunələrinə fokuslanaraq aydınlaşdıracaq. Sonunda siz regex-in necə işlədiyini deyil, həm də nə vaxt və niyə istifadə ediləcəyini başa düşəcəksiniz.
Müntəzəm İfadələr Nədir?
Müntəzəm ifadə axtarış nümunəsini təyin edən simvollar ardıcıllığıdır. Bunu yalnız dəqiq sətirləri deyil, mürəkkəb mətn nümunələrini uyğunlaşdıra bilən super-güclü "Tap" funksiyası kimi düşünün.
Niyə Regex İstifadə Etməli?
- Nümunə Uyğunluğu: Müəyyən nümunəyə uyğun mətn tapın
- Validasiya: Məlumat formatlarını yoxlayın (e-mail, telefon nömrələri və s.)
- Mətn Emalı: Mətni çıxarın, əvəz edin və ya çevirin
- Axtarış və Əvəzetmə: Mətn toplu şəkildə tapın və dəyişdirin
- Məlumat Çıxarışı: Struktursuz mətndən xüsusi məlumat çəkin
Əsas Konsepsiyalar
Nümunələrə dalmadan əvvəl bu əsas konsepsiyaları başa düşün:
- Literal Simvollar: Dəqiq mətni uyğunlaşdırın
- Metasimvollar: Mənası olan xüsusi simvollar (., *, +, ?, və s.)
- Simvol Sinifləri: Simvol dəstlərini uyğunlaşdırın ([a-z], \d və s.)
- Kvantifikatorlar: Neçə dəfə uyğunlaşacağını göstərin (*, +, ?, {n})
- Ankorlər: Mövqeləri uyğunlaşdırın (^, $, \b)
- Qruplar: Uyğunluqları tutun və təşkil edin ((...))
Vacib Regex Nümunələri
1. E-mail Validasiyası
Ən çox yayılmış regex istifadə hallarından biri:
^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$
Parçalanma:
^- Sətirin başlanğıcı[a-zA-Z0-9._%+-]+- Bir və ya daha çox əlifba-rəqəm simvolu, nöqtələr, alt xətlər və s.@- Literal @ simvolu[a-zA-Z0-9.-]+- Domen adı hissəsi\.- Literal nöqtə (escape edilmiş)[a-zA-Z]{2,}- Üst səviyyəli domen (2+ hərf)$- Sətirin sonu
İstifadə:
const emailRegex = /^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$/;
if (emailRegex.test(userEmail)) {
console.log("Etibarlı e-mail");
}
2. Telefon Nömrəsi Uyğunluğu
Müxtəlif telefon nömrəsi formatlarını uyğunlaşdırın:
^(\+?1[-.\s]?)?\(?([0-9]{3})\)?[-.\s]?([0-9]{3})[-.\s]?([0-9]{4})$
Uyğunlaşır:
- (123) 456-7890
- 123-456-7890
- 123.456.7890
- +1 123 456 7890
- 1234567890
3. URL Validasiyası
Veb URL-ləri uyğunlaşdırın:
^https?:\/\/(www\.)?[-a-zA-Z0-9@:%._\+~#=]{1,256}\.[a-zA-Z0-9()]{1,6}\b([-a-zA-Z0-9()@:%_\+.~#?&//=]*)$
Parçalanma:
^https?://- Protokol (http və ya https)(www\.)?- İxtiyari www[-a-zA-Z0-9@:%._\+~#=]{1,256}- Domen adı\.[a-zA-Z0-9()]{1,6}- Üst səviyyəli domen\b- Söz sərhədi([-a-zA-Z0-9()@:%_\+.~#?&//=]*)- İxtiyari yol
4. Parol Gücü
Güclü parolları yoxlayın:
^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)(?=.*[@$!%*?&])[A-Za-z\d@$!%*?&]{8,}$
Tələblər:
- Ən azı bir kiçik hərf
- Ən azı bir böyük hərf
- Ən azı bir rəqəm
- Ən azı bir xüsusi simvol
- Minimum 8 simvol
5. Kredit Kartı Nömrələri
Ümumi kredit kartı formatlarını uyğunlaşdırın:
^(?:4[0-9]{12}(?:[0-9]{3})?|5[1-5][0-9]{14}|3[47][0-9]{13}|3[0-9]{13}|6(?:011|5[0-9]{2})[0-9]{12})$
Uyğunlaşır:
- Visa: 4xxxxxxxxxxxxx
- MasterCard: 5xxxxxxxxxxxxxx
- American Express: 34xxxxxxxxxxxxx və ya 37xxxxxxxxxxxxx
- Discover: 6011xxxxxxxxxxxx
Ümumi Simvol Sinifləri
Əvvəlcədən Təyin Edilmiş Siniflər
\d # İstənilən rəqəm [0-9]
\w # Söz simvolu [a-zA-Z0-9_]
\s # Boşluq [ \t\n\r\f\v]
\D # Rəqəm olmayan [^0-9]
\W # Söz simvolu olmayan [^a-zA-Z0-9_]
\S # Boşluq olmayan [^ \t\n\r\f\v]
Xüsusi Simvol Sinifləri
[aeiou] # İstənilən sait səsi uyğunlaşdır
[^aeiou] # Saitlərdən başqa hər şeyi uyğunlaşdır
[a-z] # Kiçik hərfləri uyğunlaşdır
[A-Z] # Böyük hərfləri uyğunlaşdır
[0-9] # Rəqəmləri uyğunlaşdır
[a-zA-Z0-9] # Əlifba-rəqəmi uyğunlaşdır
[0-9a-fA-F] # Onaltılıq uyğunlaşdır
Kvantifikatorlar
Nümunənin neçə dəfə uyğunlaşacağını idarə edin:
* # Sıfır və ya daha çox (greedy)
+ # Bir və ya daha çox (greedy)
? # Sıfır və ya bir (ixtiyari)
{n} # Dəqiq n dəfə
{n,} # n və ya daha çox dəfə
{n,m} # n və m arasında dəfə
*? # Sıfır və ya daha çox (lazy)
+? # Bir və ya daha çox (lazy)
Nümunələr
a* # "", "a", "aa", "aaa", ... uyğunlaşır
a+ # "a", "aa", "aaa", ... uyğunlaşır ("" yox)
a? # "", "a" uyğunlaşır
a{3} # Dəqiq "aaa" uyğunlaşır
a{3,} # "aaa", "aaaa", "aaaaa", ... uyğunlaşır
a{3,5} # "aaa", "aaaa", "aaaaa" uyğunlaşır
Ankorlər və Sərhədlər
Mövqe Ankorları
^ # Sətirin başlanğıcı (və ya çox sətirli rejimdə sətir)
$ # Sətirin sonu (və ya çox sətirli rejimdə sətir)
\b # Söz sərhədi
\B # Söz sərhədi olmayan
\A # Sətirin başlanğıcı (həmişə)
\Z # Sətirin sonu (həmişə)
Nümunələr
^Hello # "Hello" başlanğıcda
World$ # "World" sonunda
\bword\b # Tam söz "word" ("sword" və ya "words" yox)
Qruplar və Tutma
Tutma Qrupları
(abc) # Tutma qrupu
(?:abc) # Tutmayan qrup
(?<name>abc) # Adlandırılmış tutma qrupu
Nümunələr
const regex = /(\d{3})-(\d{3})-(\d{4})/;
const match = "123-456-7890".match(regex);
// match[0] = "123-456-7890" (tam uyğunluq)
// match[1] = "123" (birinci qrup)
// match[2] = "456" (ikinci qrup)
// match[3] = "7890" (üçüncü qrup)
Lookaheads və Lookbehinds
Müsbət Lookahead
(?=pattern) # Nümunə ilə izlənməlidir
Nümunə: "cat"ı yalnız "s" ilə izlənərsə uyğunlaşdır:
cat(?=s) # "cats"da "cat" uyğunlaşır, amma "catch"də yox
Mənfi Lookahead
(?!pattern) # Nümunə ilə izlənməMƏLİDİR
Nümunə: "cat"ı yalnız "s" ilə izlənməzsə uyğunlaşdır:
cat(?!s) # "catch"də "cat" uyğunlaşır, amma "cats"da yox
Lookbehinds
(?<=pattern) # Nümunə ilə əvvəl gəlməlidir
(?<!pattern) # Nümunə ilə əvvəl gəlməMƏLİDİR
Real Dünya İstifadə Halları
1. Form Validasiyası
// E-mail validasiyası
const emailRegex = /^[^\s@]+@[^\s@]+\.[^\s@]+$/;
if (!emailRegex.test(email)) {
return "Etibarsız e-mail formatı";
}
// Telefon validasiyası
const phoneRegex = /^\+?[\d\s\-()]+$/;
if (!phoneRegex.test(phone)) {
return "Etibarsız telefon nömrəsi";
}
2. Mətn Çıxarışı
// Mətndən bütün e-mail ünvanlarını çıxarın
const text = "Bizimlə əlaqə: [email protected] və ya [email protected]";
const emailRegex = /\b[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Z|a-z]{2,}\b/g;
const emails = text.match(emailRegex);
// ["[email protected]", "[email protected]"]
3. Mətn Əvəzetməsi
// Kredit kartı nömrələrini maskala
const cardNumber = "1234-5678-9012-3456";
const masked = cardNumber.replace(/\d{4}(?=\d)/g, "****-");
// "****-****-****-3456"
4. Məlumat Təmizləməsi
// Əlavə boşluqları silin
const text = "Salam dünya regex-dən";
const cleaned = text.replace(/\s+/g, " ");
// "Salam dünya regex-dən"
// Xüsusi simvolları silin
const dirty = "Salam@Dünya#123!";
const clean = dirty.replace(/[^a-zA-Z0-9\s]/g, "");
// "SalamDünya123"
5. URL Parsing
const urlRegex = /^https?:\/\/([^\/]+)(\/.*)?$/;
const url = "https://example.com/path/to/page";
const match = url.match(urlRegex);
// match[1] = "example.com"
// match[2] = "/path/to/page"
Ümumi Səhvlər
Səhv 1: Həddindən Artıq Mürəkkəb Nümunələr
# PƏHS: Çox mürəkkəb
^([a-zA-Z0-9_\-\.]+)@([a-zA-Z0-9_\-\.]+)\.([a-zA-Z]{2,5})$
# YAXŞI: Daha sadə və saxlanıla bilən
^[^\s@]+@[^\s@]+\.[^\s@]+$
Səhv 2: Xüsusi Simvolları Escape Etməmək
# PƏHS: Nöqtə istənilən simvolu uyğunlaşdırır
/example.com/
# YAXŞI: Escape edilmiş nöqtə literal nöqtəni uyğunlaşdırır
/example\.com/
Səhv 3: Greedy vs Lazy Uyğunlaşma
# Greedy: Mümkün qədər çox uyğunlaşır
/<.*>/ # Bütün "<div><p>text</p></div>" uyğunlaşır
# Lazy: Mümkün qədər az uyğunlaşır
/<.*?>/ # Fərdi teqlər "<div>", "<p>" və s. uyğunlaşır
Performans Məsləhətləri
- Bir Dəfə Kompilyasiya Edin: Eyni regex-i təkrar istifadə edirsinizsə, bir dəfə kompilyasiya edin
- Ankorlardan İstifadə Edin:
^və$uyğunlaşmanı sürətləndirir - Katastrofik Backtracking-dən Qaçın: İçə-içə kvantifikatorlarla diqqətli olun
- Xüsusi Nümunələrdən İstifadə Edin: Daha xüsusi nümunələr daha sürətlidir
- Alternativləri Nəzərə Alın: Bəzən string metodları regex-dən daha sürətlidir
Regex-inizi Test Etmək
Onlayn Alətlər
- Regex101: Regex nümunələrini test edin və debug edin
- Regexr: İnteraktiv regex testi
- RegEx Pal: Sadə regex test edici
Ən Yaxşı Təcrübələr
- Müxtəlif inputlarla test edin
- Kənar halları test edin (boş sətir, xüsusi simvollar)
- Etibarsız inputlarla test edin
- Nümunələrinizi sənədləşdirin
- Mürəkkəb regex-də şərhlər istifadə edin
Nəticə
Müntəzəm ifadələr mənimsənildikdə mətn emal qabiliyyətlərinizi dramatik şəkildə yaxşılaşdıra biləcək güclü alətdir. Sadə nümunələrlə başlayın, müntəzəm məşq edin və tədricən daha mürəkkəb ifadələrə keçin.
Unutmayın: Regex hər problemə həll yox, alətdir. Bəzən sadə string metodları daha uyğundur. Ancaq nümunə uyğunluğu, validasiya və ya mətn çıxarışına ehtiyacınız olduqda, regex çox vaxt ən yaxşı seçimdir.
Regex-də peşəkar olmağın açarı təcrübədir. Bu bələdçidəki ümumi nümunələrlə başlayın, necə işlədiklərini başa düşün, sonra öz xüsusi ehtiyaclarınıza uyğunlaşdırın.
Bizim Regex Alətlərimizdən İstifadə
1tool.dev-da biz müntəzəm ifadələri test etməyə, debug etməyə və başa düşməyə kömək edən güclü Regex Test Edici təklif edirik. Alətimiz real vaxt uyğunlaşma, ətraflı izahatlar və çoxlu regex variantlarını dəstəkləyir.
Bu gün regex test edicimizi sınayın və regex ekspertinə çevrilə bilərsiniz!




