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