Skip to content

Instantly share code, notes, and snippets.

Show Gist options
  • Save alpgul/60a7838154dff071f17f8744d35570a8 to your computer and use it in GitHub Desktop.
Save alpgul/60a7838154dff071f17f8744d35570a8 to your computer and use it in GitHub Desktop.
JavaScript'te Yinelenen Adlandırılmış Yakalama Grupları Önerisi

JavaScript'te Yinelenen Adlandırılmış Yakalama Grupları Önerisi

Kısa Açıklama

Bu öneri, JavaScript'in düzenli ifadelerinde (regex) aynı adı taşıyan yakalama gruplarının farklı alternatifler içinde kullanılmasına izin veren bir TC39 önerisidir. Mevcut JavaScript uygulamalarında, her yakalama grubunun benzersiz bir ada sahip olması gerekiyorken, bu öneri farklı alternatifler için aynı group adını kullanmaya olanak sağlamaktadır.

Örnekler

Örnek 1: Tarih Formatları

/(?<year>[0-9]{4})-[0-9]{2}|[0-9]{2}-(?<year>[0-9]{4})/

Açıklama

Bu düzenli ifade iki farklı tarih formatını eşleştirebilir:

  • 2024-05 (YYYY-MM formatı)
  • 05-2024 (MM-YYYY formatı)

Kod Örneği:

const regex = /(?<year>[0-9]{4})-[0-9]{2}|[0-9]{2}-(?<year>[0-9]{4})/;

const date1 = "2024-05";
const date2 = "05-2024";

console.log(date1.match(regex).groups.year); // "2024"
console.log(date2.match(regex).groups.year); // "2024"

Örnek 2: Alternatif Eşleşmeler

/(?:(?<a>x)|(?<a>y))\\k<a>/

Açıklama

Bu düzenli ifade, x veya y harflerini ve ardından aynı harfi tekrar eden desenleri eşleştirir.

Kod Örneği:

const regex = /(?:(?<a>x)|(?<a>y))\k<a>/;

console.log(regex.test("xx")); // true
console.log(regex.test("yy")); // true
console.log(regex.test("xy")); // false

Pratik Bir Örnek: Telefon Numarası Formatları

const phoneRegex = /(?<countryCode>\+90|0)(?<areaCode>[0-9]{3})(?<number>[0-9]{7})|(?<areaCode>[0-9]{3})(?<number>[0-9]{7})/;

const phone1 = "+905551234567";
const phone2 = "05551234567";
const phone3 = "5551234567";

function parsePhone(phoneNumber) {
    const match = phoneNumber.match(phoneRegex);
    if (match) {
        return {
            countryCode: match.groups.countryCode || '0',
            areaCode: match.groups.areaCode,
            number: match.groups.number
        };
    }
    return null;
}

console.log(parsePhone(phone1));
console.log(parsePhone(phone2));
console.log(parsePhone(phone3));

Bu örnekte:

  • Üç farklı telefon numarası formatını tek bir düzenli ifadeyle eşleştirebiliyoruz
  • countryCode, areaCode ve number grupları farklı formatlarda kullanılabiliyor
  • Eksik olan countryCode için varsayılan değer atanabiliyor

Faydaları

  1. Daha Esnek Regex Desenleri: Farklı formatlardaki verileri tek bir düzenli ifadeyle eşleştirebilme
  2. Kod Tekrarını Azaltma: Benzer desenler için ayrı regex yazmaya gerek kalmaz
  3. Okunabilirlik: Karmaşık eşleştirme senaryolarında daha net ve anlaşılır regex tanımları
  4. Performans: Tek bir regex ile birden fazla formatı yakalayabilme

Referanslar

  1. TC39 Proposal GitHub Sayfası
  2. Özgün Tartışma Konusu
  3. Düzenli İfadeler Bilgi Sayfası
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment