JS String İşlemleri: Dilimleme, Regex ve Temel Manipülasyon

JS String İşlemleri

JS String İşlemleri: Dilimleme, Regex ve Temel Manipülasyon

JS String İşlemleri
4 dk okuma süresi
Bu kılavuz JavaScript'te string dilimleme (slice, substring), ayırma (split), değiştirme (replace), regex kullanımı ve template literals ile pratik temizleme tekniklerini örneklerle açıklar.
JS String İşlemleri: Dilimleme, Regex ve Temel Manipülasyon

JS String İşlemleri: Dilimleme, Regex ve Temel Manipülasyon

JavaScript'te metin verisiyle çalışmak; kullanıcı girdileri, dosya satırları, URL'ler ve loglar üzerinde işlem yapmak için sık ihtiyaç duyulan bir beceridir. Bu makalede slice(), substring(), split(), replace() ve regex temellerini; template literals ve temizleme (sanitization) teknikleriyle birlikte örnekler üzerinde adım adım açıklıyorum. Temel açıklamalar resmi dokümanlara dayanmaktadır.

Temel dilimleme: slice() vs substring()

İki yaygın dilimleme yöntemi slice(start, end) ve substring(start, end) biçimindedir. Önemli farklar şunlardır:

  • slice negatif indeksleri destekler; substring negatif olanları 0 olarak işlemeye meyillidir.
  • slice end parametresini dışlayarak sonuna kadar alır; substring de benzer davranır ama negatif ve ters argümanlarda farklı sonuç verir.

Daha teknik açıklamalar için bakınız: https://javascript.info/string.

Hızlı örnekler:
const s = "Merhaba Dünya";
s.slice(0, 7) // "Merhaba"
s.slice(-5) // "Dünya" (negatif indeks)
s.substring(0, 7) // "Merhaba"

Ayırma: split()

split(separator, limit) bir string'i ayırıcıya göre diziye çevirir. Ayırıcı string veya regex olabilir; limit parametresi çıktı dizisinin uzunluğunu sınırlar. (Dokümantasyon: MDN split.)

Örnekler:
"elma,armut,karpuz".split(",") → ["elma","armut","karpuz"]
"satır1\nsatır2".split(/\r?\n/) → satır bazlı dizi

Değiştirme ve regex: replace()

replace(searchValue, replaceValue) tek bir eşleşmeyi değiştirir; global değiştirme için searchValue olarak regex ve /g bayrağı kullanın. replace() aynı zamanda bir fonksiyon alarak her eşleşme için dinamik dönüşüm yapmanıza da olanak sağlar. Temel referans: MDN replace.

Örnekler:
"kitap kitap".replace("kitap", "defter") → "defter kitap" (sadece ilkine etki eder)
"kitap kitap".replace(/kitap/g, "defter") → "defter defter" (tüm eşleşmeler)
"John Doe".replace(/(\w+)\s+(\w+)/, (match, p1, p2) => `${p2}, ${p1}`) → "Doe, John" (yakalama grupları ile dönüşüm)

Regex: Kullanım örnekleri ve bayraklar

Regex, arama, doğrulama ve toplu değiştirme için güçlü bir araçtır. Temel kullanım örnekleri:

  • /abc/.test(str) — desenin varlığını boolean olarak döndürür.
  • str.match(/\d+/g) — metindeki tüm sayıları dizide toplar.
  • s.split(/[;,\s]+/) — birden fazla ayırıcı ile split.

Yaygın bayraklar (flags):

BayrakAnlamı
gGlobal: Tüm eşleşmeleri hedefler
iCase-insensitive: Büyük/küçük harf duyarsız
mMultiline: ^ ve $ satır başı/sonu davranışı
uUnicode modu

Regex yöntemleri ve kullanım detayları için: https://javascript.info/regexp-methods.

Template literals ve string temizleme

Template literals (`backticks`) ile değişken gömme (${...}) ve çok satırlı stringler daha okunabilir olur. Örnek:
const name = "Ayşe";
console.log(`Merhaba ${name}! Bugün ${new Date().getDate()} teklifleri var.`)

Temizleme (sanitization) için sık kullanılan adımlar:

  • trim() ile baş/son boşlukları kaldırma.
  • toLowerCase()/toUpperCase() ile kıyaslama standardı oluşturma.
  • Fazla boşlukları tek boşluğa indirgeme: s.trim().replace(/\s+/g, ' ').
  • İstenmeyen karakterleri temizlemek için basit bir regex: s.replace(/[^\w\s]/g, '') (sadece temel örnek; tüm durumları kapsamayabilir).

Pratik senaryolar: adım adım

  1. Kullanıcı adını e-postadan almak
    Adımlar: string'i @ karakterinden split edin ve ilk öğeyi alın.
    Örnek: const user = "[email protected]".split('@')[0] // "ayse"
  2. Metni güvenli şekilde 100 karaktere kırpma
    Adımlar: if (s.length <= 100) return s; else return s.slice(0, 97) + '...'
  3. CSV satırını temizleyip alanları kırpma
    Adımlar: s.split(',').map(f => f.trim()) — karmaşık CSV için özel parser tercih edin.
  4. Bir metindeki tüm sayıları almak
    Adımlar: const nums = s.match(/\d+/g) || []

İpuçları ve iyi uygulamalar

  • Basit işler için önce string metodlarını (slice, indexOf, split) düşünün; regex daha esnek ancak karmaşık olabilir.
  • Sık kullanılan regex'leri döngü içinde kullanacaksanız dışarıda derleyin (const re = /.../g) — yeniden oluşturmayı önler.
  • split ile kolayca çözebileceğiniz durumlar için karmaşık regex yazmaktan kaçının; bakım kolaylığı önemlidir.
  • Unicode ve emoji içeren metinlerde indeksleme beklentiniz dışında sonuç verebilir; bu gibi durumlarda özel kütüphaneler veya ek kontroller gerekebilir.

Kısa referans

  • slice(start, end) — negatif indeksleri destekler.
  • substring(start, end) — negatifleri 0 kabul etme ve argümanları ters çevirme davranışı.
  • split(sep, limit) — bir dizi döndürür. (MDN: link)
  • replace(pattern, repl) — /g bayrağı ile global değişim; fonksiyonla dinamik dönüşüm. (MDN: link)

Kaynaklar

Bu rehber temel kullanım senaryolarını kapsar; daha karmaşık ihtiyaçlarda regex desenlerini dikkatle test etmek ve gerekiyorsa hazır kütüphaneler kullanmak iyi bir yaklaşımdır.