Düzenli ifadeler (Regular Expressions – RegEx), metin içerisinde belirli desenleri aramak, eşleştirmek ve değiştirmek için kullanılan güçlü bir araçtır. Programlama dillerinde ve metin işleme uygulamalarında yaygın olarak kullanılan bu yapı, özellikle veri doğrulama, metin ayrıştırma ve string manipülasyonu gibi işlemlerde büyük kolaylık sağlar. Bu rehberde, düzenli ifadelerin temel bileşenleri olan belirteçler (flags), özel karakterler (metacharacters), miktar belirteçleri (quantifiers), ileri ve geri bakma ifadeleri (lookaround), açgözlü ve tembel eşleşme (greedy vs. lazy matching) gibi konular ayrıntılı bir şekilde ele alınacaktır. Ayrıca, geri dönüş referansları (backreferences) ve isimlendirilmiş gruplar (named capturing groups) gibi gelişmiş teknikler de açıklanarak, düzenli ifadeleri daha verimli kullanabilmeniz için kapsamlı bir kaynak sunulacaktır.
Modifiers & Flags (Belirteçler veya Bayraklar)
Flag | Anlam | Açıklama | Örnek |
g | Global | Tüm eşleşmeleri bulur, sadece ilkini değil. | /cat/g ifadesi “cat cat cat” dizisindeki tüm “cat” kelimeleriyle eşleşir. |
i | Case Insensitive | Büyük/küçük harf farkını göz ardı ederek eşleşme yapar. | /hello/i ifadesi “Hello”, “HELLO”, “hElLo” ile eşleşir. |
m | Multiline | ^ ve $ işaretlerinin her satırın başı ve sonu için çalışmasını sağlar. | /^hello/m ifadesi “hello\nhello” içinde her iki “hello” kelimesini de eşleştirir. |
s | Dot All | . (nokta) normalde yeni satır (\n) karakteriyle eşleşmez, ancak bu flag ile eşleşir. | /a.b/s ifadesi “a\nb” ile eşleşir. |
u | Unicode | Unicode karakterlerini düzgün işleyerek eşleşme yapar. (ö,ş,ü,ğ vb.) | /\u{1F600}/u ifadesi “😀” (gülen yüz emojisi) ile eşleşir. |
y | Sticky | Aramayı belirli bir konumdan başlatır ve eşleşme olmazsa devam etmez. | const regex = /hello/y; regex.lastIndex = 6; regex.test(“hello hello”) sadece 6. karakterden sonra “hello” bulursa eşleşir. |
d | Has Indices | Eşleşmenin dizinlerini bir dizi olarak döndürür. | /test/d.exec(“This is a test”) ifadesi [index: 10] ile “test” kelimesinin başlangıç konumunu döndürür. |
Bu flag’ler birleştirilerek kullanılabilir. Örneğin:
/hello/gi → “Hello hello HELLO” dizisindeki tüm “hello” kelimeleri ile büyük/küçük harf fark etmeksizin eşleşir.
Metacharacters (Özel Anlam İçeren Karakterler)
Meta | Anlam | Açıklama | Örnek |
| | OR (alternation) – Pipe Sign | İki veya daha fazla seçenek arasında seçim yapar. | /cat|dog|fish/ ifadesi cat, dog ve fish ile eşleşir. |
. | Any Character (Wildcard) – Dot Sign | Yeni satır (\n) hariç herhangi bir karakterle eşleşir. | /c.t/ ifadesi “cat”, “cot”, “cut” gibi kelimelerle eşleşir. |
^ | Start of String – Caret Sign | Dizginin başında belirtilen deseni arar. | /^hello/ ifadesi “hello world” ile eşleşir ama “world hello” ile eşleşmez. |
$ | End of String – Dollar Sign | Dizginin sonunda belirtilen deseni arar. | /world$/ ifadesi “hello world” ile eşleşir ama “world hello” ile eşleşmez. |
\d | Digit | Bir rakam (0-9) ile eşleşir. | /\d+/ ifadesi “abc123” içinde “123” ile eşleşir. |
\D | Non-Digit | Rakam olmayan karakterlerle eşleşir. | /\D+/ ifadesi “abc123” içinde “abc” ile eşleşir. |
\w | Word Character | Harf, rakam veya alt çizgi ([a-zA-Z0-9_]) ile eşleşir. | /\w+/ ifadesi “hello_world123” ile eşleşir. |
\W | Non-Word Character | Harf, rakam ve alt çizgi dışında kalan karakterlerle eşleşir. | /\W+/ ifadesi “hello world!” içinde ” ” ve “!” ile eşleşir. |
\s | Whitespace | Boşluk karakterleri (space, tab, newline) ile eşleşir. | /\s+/ ifadesi “hello world” içinde boşluk karakteriyle eşleşir. |
\S | Non-Whitespace | Boşluk olmayan karakterlerle eşleşir. | /\S+/ ifadesi “hello world” içinde “hello” ve “world” ile eşleşir. |
\b | Word Boundary | Kelimenin başını veya sonunu belirtir. | /\bcat\b/ ifadesi “cat” kelimesiyle eşleşir ama “category” ile eşleşmez. |
\B | Non-Word Boundary | Kelimenin içinde bulunan deseni arar. | /\Bcat\B/ ifadesi “category” içinde “cat” ile eşleşir ama “cat” kelimesiyle eşleşmez. |
\uxxxx | Unicode | Unicode karakterlerini temsil eder. XXXX, 16 bitlik Unicode kodunu ifade eder. | \u00E7 ifadesi “ç” karakterine karşılık gelir. “çare” kelimesindeki “ç” harfi ile eşleşir. |
() | Grouping (Parantheses) | Belirtilen ifadeyi grup olarak işler. | /(ab)+/ ifadesi “abab” içinde “ab” grubuyla eşleşir. |
[] | Character Set (Bracket) | Köşeli parantez içindeki karakterlerden herhangi biriyle eşleşir. | /[aeiou]/ ifadesi “apple” içinde “a”, “e” ile eşleşir. |
[^] | Negated Character Set | Köşeli parantez içindeki karakterler dışındaki karakterlerle eşleşir. | /[^aeiou]/ ifadesi “hello” içinde “h”, “l”, “l” ile eşleşir. |
Quanfiers (Miktar Belirteçleri)
Belirteç | Anlam | Açıklama | Örnek |
+ | One or More – 1 veya daha fazla | Önceki karakterin en az bir kez tekrar etmesi durumunda eşleşir. | “a+” ifadesi “a”, “aa”, “aaa” gibi en az bir a içeren dizelerle eşleşir, ancak “b” ile eşleşmez. |
* | Zero or More – hiç veya daha fazla | Önceki karakterin hiç veya daha fazla kez tekrarlanması durumunda eşleşir. | “a*” ifadesi “”, “a”, “aa”, “aaa” gibi herhangi bir sayıda a içeren (veya hiç içermeyen) dizelerle eşleşir. |
? | Optional (Zero or One) | Önceki karakterin hiç olmaması veya bir kez bulunması durumunda eşleşir. | “colou?r” ifadesi “color” ve “colour” kelimeleriyle eşleşir. |
\ | Escape Character | Özel karakterleri kaçış karakteriyle kullanmaya yarar. | /\./ ifadesi “hello.world” içinde “.” karakteriyle eşleşir. |
{n} | Exact Count – Bire bir aynı | n kez tekrar eden karakterlerle eşleşir. | “a{3}” ifadesi “aaa” ile eşleşir ama “aa” veya “aaaa” ile eşleşmez. |
{n,m} | Range – Aralık | n ile m arasında tekrar eden karakterlerle eşleşir. | “a{2,5}” ifadesi “aa”, “aaa”, “aaaa”, “aaaaa” ile eşleşir ama “a” veya “aaaaaa” ile eşleşmez. |
{n,} | At Least n – En az n | En az n kez tekrar eden karakterlerle eşleşir. | “a{3,}” ifadesi “aaa”, “aaaa”, “aaaaaa” gibi en az 3 a içeren dizelerle eşleşir ama “aa” ile eşleşmez. |
Regular Expressions Patterns (Düzenli İfade Kalıpları)
İfade | Açıklama | Örnek |
[abc] | a, b veya c karakterlerinden biriyle eşleşir. | /[abc]/ → “apple” a (ilk bulunan a) |
[^abc] | a, b veya c dışındaki herhangi bir karakterle eşleşir. | /[^abc]/ → “hello” h (ilk a, b, c olmayan karakter) |
[a-z] | Küçük harflerle (a ile z arasındaki herhangi bir karakter) eşleşir. | /[a-z]/ → “Hello” e, l, l, o |
[A-z] | A-Z ve a-z arasındaki ASCII karakterlerle eşleşir. Ancak bazı özel karakterleri de kapsar! (örn: [, \, ], _) | /[A-z]/ → “Test_123” T, e, s, t, _ |
[A-Z] | Büyük harflerle (A ile Z arasındaki herhangi bir karakter) eşleşir. | /[A-Z]/ → “Hello” H |
[123] | 1, 2 veya 3 karakterlerinden biriyle eşleşir. | /[123]/ → “hello2world” 2 |
[0-5] | 0 ile 5 arasındaki rakamlarla eşleşir. | /[0-5]/ → “The number is 429” 4, 2 |
[0-9] | Herhangi bir rakam (0 ile 9 arasındaki herhangi bir karakter) ile eşleşir. | /[0-9]/ → “My phone is 987654” 9, 8, 7, 6, 5, 4 |
Lookaround (Öngörme)
Kullanım | Anlam | Açıklama | Örnek |
(?=) | Positive Lookahead (İleriye Bakma) | Belirli bir desenin devamında belirli bir şeyin olması gerektiğini kontrol eder. | “\w+(?=@gmail\.com)” ifadesi “[email protected]” içinde “ali” ile eşleşir. Ancak “[email protected]” eşleşmez. |
(?!) | Negative Lookahead (İleriye Bakma) | Belirli bir desenin devamında belirli bir şeyin olmaması gerektiğini kontrol eder. | \w+(?!@gmail\.com) ifadesi “[email protected]” içinde “ali” ile eşleşir, ancak “[email protected]” eşleşmez. |
(?<=) | Positive Lookbehind (Geriye Bakma) | Belirli bir desenin öncesinde belirli bir şeyin olup olmadığını kontrol eder. | “(?<=\$)\d+” ifadesi “$100” içinde “100” ile eşleşir, çünkü öncesinde $ sembolü var. |
(?<!) | Negative Lookbehind (Geriye Bakma) | Belirli bir desenin öncesinde belirli bir şeyin olmaması gerektiğini kontrol eder. | “(?<!\$)\d+” ifadesi “$100 200” içinde “200” ile eşleşir, ancak “100” eşleşmez (çünkü $ sembolüyle başlamış). |
Greedy Matching (Açgözlü Eşleşme)
Bir desenin mümkün olduğunca uzun bir eşleşme yapmasına izin verir.
Kullanım Formatı
/n.*m/ ifadesinde n karakteri ile satırdaki son m karakteri arasındaki tüm karakterleri eşleştirir.
/<a.*>/ ifadesi, “<a href=’url’>Link</a>” gibi metinlerle eşleşir ve tüm metni <a … > etiketini kapsar.
Lazy Matching (Tembel Eşleşme)
Bir desenin mümkün olduğunca kısa bir eşleşme yapmasına izin verir.
Kullanım Formatı
/n.*?m/ ifadesinde n karakteri ile ilk bulunan m karakteri arasındaki tüm karakterleri eşleştirir.
/<a.*?>/ ifadesi, aynı metni sadece ilk <a> etiketini eşleştirir.
Backreferences (Geri Dönüşler)
Backreference’ler, daha önce tanımlanmış bir grup ile eşleşen metni tekrar kullanmanıza olanak tanır. Bu, bir grup eşleşmesinin ardından aynı metni tekrar aramak için kullanılır.
Kullanım Formatı
\n, burada n, grup numarasını temsil eder.
(\w+)\s+\1 Bu ifade, aynı kelimenin iki kez ardışık olarak geçtiği durumlarla eşleşir. İlk grup (\w+) bir kelimeyi yakalar ve \1 aynı kelimenin tekrarını arar.
• “hello hello” → Eşleşir.
• “hello world” → Eşleşmez.
Naming Capturing Groups (Grup İsimlendirmesi)
Regex’te grup isimlendirme (Named Capturing Groups), parantez içine alınan bir gruba özel bir ad vermek için kullanılır. Bu sayede, eşleşen bölümü ismiyle çağırabiliriz, bu da regex ifadelerini daha okunabilir ve yönetilebilir hale getirir.
Kullanım Formatı
İsimlendirilmiş gruplar (?<grup_adi>…) veya (?’grup_adi’…) şeklinde tanımlanır.
/(?<isim>\w+) (?<soyisim>\w+)/
Non-Capturing Groups (Yakalamayan Gruplar)
Bir grup eşleşmesini yapmak ama o grubu yakalamamak için kullanılır. Bu, gereksiz gruplardan kaçınmanıza yardımcı olur.
Kullanım Formatı
(?:…) şeklinde tanımlanır. Bu tür gruplar sadece deseni gruplayarak eşleşmeye yardımcı olur, ancak yakalanan değeri geri döndürmez.
(?:\d{2})-\d{2}-\d{2} Bu ifade, formatı XX-XX-XX olan tarihleri eşleştirir. (?:\d{2}) kısmı ilk iki basamağı gruplar ama yakalamaz. Diğer iki basamağı ise eşleşme için kullanır.
• “12-34-56” → Eşleşir.
• “123-45-67” → Eşleşmez, çünkü ilk iki basamağın sadece iki haneli olması gerekiyor.