Bayraklar ve özellikler

Flash Player 9 ve üstü, Adobe AIR 1.0 ve üstü

Aşağıdaki tabloda, normal ifadeler için ayarlayabildiğiniz beş bayrak listelenmektedir. Normal ifade nesnesinin bir özelliği olarak her bayrağa erişilebilir.

Bayrak

Özellik

Açıklama

g

global

Birden çok eşleşme yapar.

i

ignoreCase

Büyük/küçük harf duyarlı eşleşme. A Z ve a z karakterleri için geçerlidir ancak É ve é gibi genişletilmiş karakterler için geçerli değildir.

m

multiline

Bu bayrak ayarlıyken, $ ve ^ öğeleri sırayla bir satırın başıyla ve bir satırın sonuyla eşleşebilir.

s

dotall

Bu bayrak ayarlıyken, . (nokta), yeni satır karakteriyle ( \n ) eşleşebilir.

x

extended

Genişletilmiş normal ifadelere izin verir. Desenin parçası olarak yoksayılan boşlukları normal ifadeye yazabilirsiniz. Bu, normal ifade kodunuzu daha okunaklı yazmanıza olanak sağlar.

Bu özelliklerin salt okunur olduğunu unutmayın. Aşağıdaki gibi, normal ifade değişkeni ayarladığınızda, bayrakları ( g , i , m , s , x ) ayarlayabilirsiniz:

var re:RegExp = /abc/gimsx;

Ancak, adlandırılmış özellikleri doğrudan ayarlayamazsınız. Örneğin, aşağıdaki kod bir hataya yol açar:

var re:RegExp = /abc/; 
re.global = true; // This generates an error.

Varsayılan olarak, bayrakları normal ifade bildiriminde belirtmemeniz durumunda, bayraklar ayarlanmaz ve karşılık gelen özellikler de false değerine ayarlanır.

Ayrıca, normal ifadenin iki başka özelliği daha vardır:

  • lastIndex özelliği, normal ifadenin exec() veya test() yöntemine yapılan sonraki çağrı için dizede kullanılacak dizin konumunu belirtir.

  • source özelliği, normal ifadenin desen bölümünü tanımlayan dizeyi belirtir.

g (global) bayrağı

g ( global ) bayrağı dahil edilmediğinde , normal ifade birden çok eşleşme yapmaz. Örneğin, normal ifadeye g bayrağı dahil edilmediğinde, String.match() yöntemi yalnızca bir eşleşen alt dize döndürür:

var str:String = "she sells seashells by the seashore."; 
var pattern:RegExp = /sh\w*/; 
trace(str.match(pattern)) // output: she

g bayrağı ayarlandığında, Sting.match() yöntemi aşağıdaki gibi birden çok eşleşme döndürür:

var str:String = "she sells seashells by the seashore."; 
var pattern:RegExp = /sh\w*/g; 
// The same pattern, but this time the g flag IS set. 
trace(str.match(pattern)); // output: she,shells,shore

i (ignoreCase) bayrağı

Varsayılan olarak, normal ifade eşleşmeleri büyük/küçük harf duyarlıdır. i ( ignoreCase ) bayrağını ayarladığınızda, büyük/küçük harf duyarlılığı yoksayılır. Örneğin, normal ifadedeki küçük harfli s öğesi, dizenin birinci karakteri olan büyük harfli S öğesiyle eşleşmez:

var str:String = "She sells seashells by the seashore."; 
trace(str.search(/sh/)); // output: 13 -- Not the first character

Ancak i bayrağı ayarlıyken, normal ifade, baş harf olan S öğesiyle eşleşir:

var str:String = "She sells seashells by the seashore."; 
trace(str.search(/sh/i)); // output: 0

i bayrağı yalnızca A Z ve a z karakterleri için büyük/küçük harf duyarlılığını yok sayar ancak É ve é gibi genişletilmiş karakterler için büyük/küçük duyarlılığını uygulamaya devam eder.

m (multiline) bayrağı

m ( multiline ) bayrağı ayarlanmazsa, ^ öğesi dizenin başıyla ve $ öğesi de dizenin sonuyla eşleşir. m bayrağı ayarlanırsa, bu karakterler sırayla satırın başıyla ve satırın sonuyla eşleşir. Bir yeni satır karakteri içeren şu dizeyi göz önünde bulundurun:

var str:String = "Test\n"; 
str += "Multiline"; 
trace(str.match(/^\w*/g)); // Match a word at the beginning of the string.

Normal ifadede g ( global ) bayrağı ayarlansa da, ^ için yalnızca bir eşleşme (dizenin başı) bulunduğundan, match() yöntemi yalnızca bir alt dizeyle eşleşir. Çıktı şudur:

Test

Burada, aynı kod m bayrağı ayarlanmış şekilde verilmiştir:

var str:String = "Test\n"; 
str += "Multiline"; 
trace(str.match(/^\w*/gm)); // Match a word at the beginning of lines. 

Bu defa, çıktı her iki satırın başındaki sözcükleri içerir:

Test,Multiline

Yalnızca \n karakterinin satır sonunu işaret ettiğini unutmayın. Aşağıdaki karakterler satır sonunu işaret etmez:

  • Döndürme ( \r ) karakteri

  • Unicode satır ayırıcı ( \u2028 ) karakteri

  • Unicode paragraf ayırıcı ( \u2029 ) karakteri

s (dotall) bayrağı

s ( dotall veya “dot all”) bayrağı ayarlanmazsa, normal ifadedeki bir nokta ( . ) yeni satır karakteriyle ( \n ) eşleşmez. Bu nedenle de aşağıdaki örnekte bir eşleşme yoktur:

var str:String = "<p>Test\n"; 
str += "Multiline</p>"; 
var re:RegExp = /<p>.*?<\/p>/; 
trace(str.match(re)); 

Ancak, s bayrağı ayarlanırsa, nokta yeni satır karakteriyle eşleşir:

var str:String = "<p>Test\n"; 
str += "Multiline</p>"; 
var re:RegExp = /<p>.*?<\/p>/s; 
trace(str.match(re)); 

Bu durumda eşleşme, yeni satır karakteri de dahil olacak şekilde <p> etiketleri içindeki alt dizenin tamamı olur:

<p>Test 
Multiline</p>

x (extended) bayrağı

Özellikle de çok fazla meta sembol ve meta sıralar içeriyorsa, normal ifadelerin okunması zor olabilir. Örneğin:

/<p(>|(\s*[^>]*>)).*?<\/p>/gi

Normal ifadede x ( extended ) bayrağını kullandığınızda, desene yazdığınız tüm boşluklar yoksayılır. Örneğin, aşağıdaki normal ifade bir önceki örnekle aynıdır:

/     <p    (>  | (\s* [^>]* >))    .*?    <\/p>  /gix

x bayrağı ayarlanmışsa ve boşluk karakteriyle eşleşme olmasını istiyorsanız, boşluğun önüne ters eğik çizgi getirin. Örneğin, şu iki normal ifade birbirine eşdeğerdir:

/foo bar/ 
/foo \ bar/x

lastIndex özelliği

lastIndex özelliği, dizede, bir sonraki aramanın başlayacağı dizin konumunu belirtir. Bu özellik, g bayrağı true değerine ayarlanmış bir normal ifadede çağrılan exec() ve test() yöntemlerini etkiler. Örneğin, şu kodu göz önünde bulundurun:

var pattern:RegExp = /p\w*/gi; 
var str:String = "Pedro Piper picked a peck of pickled peppers."; 
trace(pattern.lastIndex); 
var result:Object = pattern.exec(str); 
while (result != null) 
{ 
    trace(pattern.lastIndex); 
    result = pattern.exec(str); 
}

lastIndex özelliği varsayılan olarak 0 değerine ayarlanır (aramayı dizenin başından başlatmak için). Her eşleşmeden sonra, bu özellik eşleşmeden sonraki dizin konumuna ayarlanır. Bu nedenle de önceki kodun çıktısı şöyledir:

0 
5 
11 
18 
25 
36 
44

global bayrağı false değerine ayarlanırsa, exec() ve test() yöntemleri lastIndex özelliğini kullanmaz veya ayarlamaz.

String sınıfının match() , replace() ve search() yöntemlerinin tümü, yöntem çağrısında kullanılan normal ifadenin lastIndex özelliğinin ayarına bakılmaksızın, tüm aramaları dizenin başından başlatır. (Ancak, match() yöntemi lastIndex öğesini 0 değerine ayarlar.)

lastIndex özelliğini normal ifade eşlemesi için dizedeki başlangıç konumunu belirlemek üzere ayarlayabilirsiniz.

source özelliği

source özelliği, normal ifadenin desen bölümünü tanımlayan dizeyi belirtir. Örneğin:

var pattern:RegExp = /foo/gi; 
trace(pattern.source); // foo