JavaScript Temelleri

Bölüm 10

RegExp (Düzenli Deyim) Nesne Sınıfı

Bölüm 10 Sayfa 1

10.1 - RegExp (Düzenli Deyim) Nesne Sınıfı Örnekleri Yapılandırıcısı

Düzenli deyimler 1950 lerden beri matematiksel olarak bilinmekte olmalarına karşın ilk olarak PERL script dili ile bilgisayar programcılığında geniş olarak kullanım alanı bulmuştur. PERL kadar olmasa da, JavaScript programlama dili, düzenli deyimlere geniş destek sağlamaktadır. Düzenli deyimler üzerinde başlangıç bilgileri, ek-2 de verilmiştir. Düzenli deyim literalleri, bölüm 2.10.5.1 de tanıtılmıştır. Düzenli deyim sınıfı nesne örneklerini de işlevi düzenli deyim literalleri ile aynıdır. Her ikisi de belirli karakter dizigisi verilerinin belirli düzenl deyim şablonları ile uyuşup uyuşmadığının kontrolü amacı ile kullanılırlar. Düzenli deyim nesne sınıf örnekleri, Öntanımlı düzenli deyim nesne sınıfı örnekleri yapılandırıcısının yardımı ile oluşturulur. Düzenli deyim yapılandırıcısının kullanımı:

DüzenliDeyimSınıfıNesneÖrneği = new RegExp(şablon, anahtar);
		

şeklindedir. Burada şablon, bir karakter dizigisi verisi olarak ek-2 de açıklanan birdüzenli deyim şablonu, anahtar da yine karakter dizigisi verisi olarak g, i,m karakterlerinden oluşabilir. Eğer anahtarlar arasında,

Düzenli deyim yapılandırıcısından yararlanılarak, yeni bir düzenli deyim sınıfı nesne örneği oluşturulmasını sağlayan bir JavaScript programı ve ilişikli olduğu sayfada verdiği sonuç, aşağıda görülmektedir.

...

var b = new RegExp('d*', 'gi');
veriTipiYaz(b, 'b10.1-uyg-1-sonuç-1'); 

...
		

Program Sonucu :

Yukarıdaki program sonucundan görülebildiği gibi, oluşan yeni düzenli deyim nesne örneğinin içeriği,

var b = /d*/ig;
		

ifadesi sonucunda oluşturulan düzenli deyim literali ile aynı olmaktadır.

10.2 - RegExp (Düzenli Deyim) Nesne Sınıfı Örnekleri Yapılandırıcısının Özellikleri

Düzenli deyim nesne sınıfı yapılandırıcısı olan RegExp() bir fonksiyondur. Bu fonksiyonun içsel [[Prototype]] özelliğinin değeri, doğal olarak fonksiyon prototip nesnesidir (function.prototype)

Düzenli deyim nesne sınıfı yapılandırıcısı olan RegExp() fonksiyonunun en önemli özelliği prototype özelliğidir.

10.2.1 - RegExp (Düzenli Deyim) Nesne Sınıfı Örnekleri Yapılandırıcısının prototype Özelliği

Düzenli deyim nesne sınıfı yapılandırıcısı olan RegExp(); fonksiyonunun prototype özelliğinin (Regexp.prototype) başlangıç değeri, yine bir düzenli deyim sınıfı nesne örneği olan öntanımlı düzenli deyim prototip nesnesidir. Buna kısaca düzenli deyim sınıfı prototip nesnesi adı verilir. Düzenli deyim sınıfı prototip nesnesinin özellikleri aşağıda incelenmiştir.

10.3 - RegExp (Düzenli Deyim) Nesne Sınıfı Prototip Nesnesinin Özellikleri

Düzenli deyim sınıfı prototip nesnesinin, içsel [[Prototype]] özelliğinin değeri generik nesne sınıfı prototipidir (Object prototype). Yine içsel [[Class]] özelliği ise, "Object" olarak belirlenmiştir. Bu değer, düzenli deyim nesne sınıfının, generik nesne sınıfının bir alt sınıfı olduğunu ve generik nesne sınıfının tüm özellik ve metotlarını kalıtımla kazanacağını belirtir.

Düzenli deyimler nesne sınıfı prototip nesnesinin kendine özgü bir valueOf() metodu yoktur. Buna rağmen, generik nesne sınıfının prototip nesnesinin valueOf() metodunu kalıtım yolu ile elde eder.

Düzenli deyimler nesne sınıfı prototip nesnesinin özellik ve metotları, düzenli deyim nesne sınıfına özgüdür. Bu özellikleri çağıran this nesnesinin veri tipi düzenli deyim değilse bir TypeError istisnası fırlatılır.

10.3.1 - RegExp (Düzenli Deyim) Nesne Sınıfı Prototip Nesnesinin constructor Özelliği

Düzenli deyim nesne sınıfı prototipinin constructor özelliğinin değeri, ((Regexp.prototype.constructor), öntanımlı düzenli deyim nesne sınıf örnekleri yapılandırıcısı (constructor'u) olan RegeExp() fonksiyonudur. Bu bu fonksiyon, JavaScript yorumlayıcısının standart bir yazılımı olduğundan içeriği kullanıcılara kapalıdır ve görüntülenemez. Bunu açıklayan bir JavaScript programı ve bağlantılı olduğu uygulama sayfasında verdiği sonuç, aşağıda görülmektedir:

...

sonuçYaz('RegExp.prototype.constructor', RegExp.prototype.constructor, 'b10.3.1-uyg-1-sonuç-1'); 

...
		

Program Sonucu :

10.3.2 - RegExp (Düzenli Deyim) Nesne Sınıfı Prototip Nesnesinin exec() Metodu

Bu metot, karakter dizgisi nesne sınıfı (String) nesne sınıfı prototipinin, match() metodunun da temelini oluşturur. Kullanımı,

this.exec(KarakterDizgisi);
		

şeklindedir. Burada this bir düzenli deyim nesne örneği veya literali, KarakterDizigisi ise, aranmanın yapılacağı kd literali veya nesne örneğidir.

Eğer uyuşma sağlanamasa, geriye null döndürülür.

Eğer uyuşma sağlanırsa, geriye bir dizi döndürülür. Bu dizinin ilk elemanı, aranan kd içinde, uyuşmanın sağlandığı kısım, bunu takip eden elemanların değeri de eğer düzenli deyimde varsa, çeşitli parantezlerin aranan kd de uyuştuğu kısımlardır. Bu dizinin, index özelliği, uyuşmanın sağlandığı karakterin konumu, input özelliği, aranan kd verisini, eğer g anahatarı açıksa, lastIndex özelliği, uyuşmanın tamamlandığı son karakterin konumunu içerir.

Düzenli deyim nesne sınıfı prototipinin exec() metodu, global arama anahtarından etkilenmez ve rastladığı ilk uyuşma sonuçlarını döndürerek devreden çıkar. Eğer g anahatarı açıksa, lastIndex özelliği, uyuşmanın tamamlandığı son karakterin konumunu kaydeder ve ayanı kd verisi için aynı düzenli deyim ifadesi yeniden çağrılırsa, ikinci aramayı bu kaydettiği lastIndex değerinden başlayarak yapar. Yani, bir kd verisi boyunca bir döngü sistemi içinde exec() metodunun ardışık olarak uygulanması ile sağlanabilecek tüm uyuşmalar saptanabilir. Bu konuda bir JavaScript programı ve bağlantılı olduğu uygulama sayfasında verdiği sonuç, aşağıda görülmektedir:

...
var şablon = /a/ig, kd = 'Arabalar', sonuç = [];
do {
sonuç = şablon.exec(kd);
if(sonuç != null) {
bilgiYaz(' Uyuşma :' + sonuç[0] + 'konum : 'sonuç.index, 'b10.3.2uyg-1-sonuç-1');
bilgiYaz(' şablon.lastIndex :' + şablon.lastIndex, 'b10.3.2uyg-1-sonuç-2');
}
}
while(şablon.exec(kd != null)
...
		

Program Sonucu :

10.3.3 - RegExp (Düzenli Deyim) Nesne Sınıfı Prototip Nesnesinin test() Metodu

Düzenli deyim nesne sınıfının test() metodu, prensip olarak uyuşma oladuğunda geriye true döndüren exec() metodu ile aynıdır. Bu metodun kullanımı,

this.test(KarakterDizgisi);
		

şeklindedir. Burada this bir düzenli deyim nesne örneği veya literali, KarakterDizigisi ise, aranmanın yapılacağı kd literali veya nesne örneğidir.

Eğer uyuşma sağlanırsa, geriye true yoksa, false döndürülür. Bu konuda bir e-mail kontrolunu içeren JavaScript programı ve ilişkilendirilmiş olduğu uygulama sayfasında verdiği sonuç aşağıda görülmektedir. Bu program, webreference.com dan alınmıştır. Sunucu isimleri Türkçe karakterler içermeye başladığında bu programdaki düzenli deyim ifadelerini değiştirmek gerekecektir.

...
var reg1 = /(@.*@)|(\.\.)|(@\.)|(\.@)|(^\.)/; // geçerli Değil !

var reg2 =/^.+\@(\[?)[a-zA-Z0-9\-\.]+\.([a-zA-Z]{2,3}|[0-9]{1,3})(\]?)$/; // geçerli!

var adres = 'emir_bedri@hotmail.com';

if ( ! reg1.test(adres) && reg2.test(adres) ) {

sonuçYaz('Adres Doğru', 'b10.3.3-uyg-1-sonuç-1');
}

else {

sonuçYaz('Adres Yanlış', 'b10.3.3-uyg-1-sonuç-1');
}
...
				

Program Sonucu :

Aynı programın on-line sürümü de geliştirilmiştir.

Düzenli deyim nesne sınıfının test() metodu, prensip olarak aynı nesne sınıfının exec() metodu temeline dayandığından, bir kd verisinin bir düzenli deyim ifadesi ile tüm uyuşan kısımlarının aynı exec() metodunda yapıldığı gibi, bir döngü sistemi içinde çalıştırırak saptanma olanağı bulunabilir.

10.3.4 - RegExp (Düzenli Deyim) Nesne Sınıfı Prototip Nesnesinin toString() Metodu

Bu metot, uygulandığı düzenli deyim ifadesinin /, düzenli deyim içeriği ve 'i', 'g', 'm' anahtarlarını birleştirerek ilkel bir kd verisine dönüştürür ve bu veriyi döndürür. Aşağıda bu konuda bir JavaScript programı ve ilişkilendirilmiş olduğu bir uygulama sayfasında verdiği sonuç görülmektedir.

...

var düzenliDeyim = new RegExp('j?\.{1,3}', 'gi');
veriTipiYaz(düzenliDeyim.toString(), 'b10.3.4-uyg-1-sonuç-1'); 

...
		

Program Sonucu :

10.4 - RegExp (Düzenli Deyim) Nesne Sınıfı Prototip Nesnesi Örneklerinin Özellikleri

Düzenli deyim nesne sınıf örnekleri, öntanımlı düzenli deyim yapılandırıcısı yardımı ile oluşturulur. Bu ssınıf örnekleri, sınıf prototipinin sahip olduğu tüm özellik ve metotları kalıtım yolu ile elde ederler. Bunlar ayrıca beş ilave özelliğe sahiptirler. Bunlar, source, global, ignoreCase multiline, ve lastIndex özellikleridir.

Düzenli deyim nesne sınıf örneklerinin source özelliği, bu örneklerin içeriğinin karakter dizigisi değeri olan bir salt okunur kd verisidir. Bu özellik, her düzenli deyim nesne sınıf örneğinde erişilebilir durumdadır. Bu konuda bir JavaScript programı ve bağlantılı olduğu uygulama sayfasında verdiği sonuç, aşağıda görülmektedir:

...

var düzenliDeyim = new RegExp('j?\.{1,3}', 'gi');
veriTipiYaz(düzenliDeyim.source, 'b10.4-uyg-1-sonuç-1'); 
...
		

Program Sonucu :

Yukarıdaki program sonuçlarından da görülebildiği gibi, düzenli deyim nesne örneklerinin source metodu, sadece düzenli deyim yazılımını içerir ve durum değiştirici 'g', 'i' ve 'm' anahtarlarını içermez. Bu değerlerin de kontrol edilebilmesi için, her özellik ayrı ayrı sorgulanmalı veya, düzenli deyim nesne örneklerinin toString() metodu kullanılmalıdır.

Düzenli deyim nesne sınıf örneklerinin global, ignoreCase multiline özellikleri,, bu deyimler oluşturulurken belirtilmiş anahtarlardır. Bu özellikler, salt okunur karakterdedir ve her düzenli deyim nesne sınıf örneği için, her zaman erişilebilir değerlerdir.

En sonuncu özellik olan lastIndex özelliği ise, okunabilir ve değiştirilebilr niteliktedir. Bu değer, düzenli deyimin kontrol ettiği kd verisinde uyuşmanın yeniden kontrol edilmesinin başlanacağı karakter konumudur. Sadece g anahatarı açık olan düzenli deyimlerde lastIndex özelliğinin bulunabildiği anımsanmalıdır. Bu değer, exec() ve test() metotları tarafından kullanılır. Kullanıcılar isterlerde bu değeri değiştirebilirler.

RegExp (Düzenli Deyim) Nesne Sınıfı Yapılandıcısının Fonksiyon Olarak Kullanımı

Düzenli deyim yapılandırıcısının fonksiyon olarak kullanımı fazla alışılmış bir uygulama değildir. bu kullanım,

DüzenliDeyimSınıfıNesneÖrneği = RegExp(şablon, anahtar);
		

şekklindedir. Eğer şablon zaten bir düzenli deyim nesne örneği ise değiştirilmeden geri döndürülür. Aksi halde, düzenli deyim yapılandırıcısı çağrılarak yeni bir düzenli deyim nesne sınıf örneği oluşturulur.

Valid XHTML 1.1