AS3
中的正則表達式
一、
定義方式,可以有兩種
var pattern2:RegExp = / test - \d / i;
1)
使用
new
來新建一個
RegExp
對象,其中參數爲
1
)表達式字符串
2
)表達式的參數,這種方式如果要用
\,
一定要用
\\
來轉義。
2)
直接採用
/
形式,以把表達式的內容寫到
/……./
裏面,在後面跟上表達式的參數,參數字符可以同時添加多個,例如:
/………/gi
二、
參數介紹
1)
Dotall
屬性,用
s
字符表示參數,指定字符(
.
)在表達式裏是不是匹配新行,如果使用了
s
參數,那就表示
dotall
表示真
例:
+ " again</p> "
+ " <p>Hello</p> " ;
var pattern:RegExp = /< p > . *?< \ / p >/ ;
trace(pattern.dotall) // false
trace(pattern.exec(str)); // <p>Hello</p>
pattern = /< p > . *?< \ / p >/ s;
trace(pattern.dotall) // true
trace(pattern.exec(str));
例:
var str:String = " The phone number is (415)555-1212. " ;
trace(rePhonePattern1.extended) // false
trace(rePhonePattern1.exec(str)); // (415)555-1212
var rePhonePattern2:RegExp = / \d { 3 } - \d { 3 } - \d { 4 } | \( \d { 3 } \) \ ? \d { 3 } - \d { 4 } / x;
trace(rePhonePattern2.extended) // true
trace(rePhonePattern2.exec(str)); // (415)555-1212
3)
global
屬性,用
g
參數表示,指是否用表達式在匹配以後在下次匹配的時候是從頭再來還是從上次匹配過的地方開始,其
lastIndex
屬性會保存起來。
例:
var str:String = " foo1 foo2 " ;
trace(pattern.global); // false
trace(pattern.exec(str)); // foo1
trace(pattern.lastIndex); // 0
trace(pattern.exec(str)); // foo1
pattern = / foo\d / g;
trace(pattern.global); // true
trace(pattern.exec(str)); // foo1
trace(pattern.lastIndex); // 4
trace(pattern.exec(str)); // foo2
例:
var str:String = " Bob bob " ;
trace(pattern.ignoreCase); // false
trace(pattern.exec(str)); // bob
pattern = / bob / i;
trace(pattern.ignoreCase); // true
trace(pattern.exec(str)); // Bob
這個屬性要和 global 結合使用,當 global 爲 true 時,執行 exec() 和 test() 後, lastIndex 屬性會被設置爲下一個字符,如果是 false ,則會從頭開始。
例:
6) multiline 屬性,用 m 參數表示,指表達式匹配的時候用字符( ^ )和( $ )分別表示在之前或之後有新的一行。
例:
var str:String = " foo\n "
+ " bob " ;
trace(pattern.multiline); // false
trace(pattern.exec(str)); // null
pattern = /^ bob / m;
trace(pattern.multiline); // true
trace(pattern.exec(str)); // bob
例:
trace (re1.source); // aabb
var re2:RegExp = new RegExp( " x+y* " , " i " );
trace(re2.source); // x+y*
1) Exec() 方法:
i. 輸入:傳入一個 String 類型的參數,表示要查詢的字符串。
ii. 返回:如果沒有匹配到就返回 null ,否則返回一個 Object 對象。
這個 Object 對象的屬性:
a) 一個 Array (數組),元素 0 包含一個匹配得到的子串, 1 到 n 包含,其中定義的組所匹配的字符子串
b) Index 匹配子串在字符串裏的位置
c) Input 輸入的原始字符串。
例:
var str:String = " She sells seashells by the seashore " ;
var result:Object = myPattern.exec(str);
trace(result);
輸出:
-
result[0]
是”she”
-
result[1]
是一個空串( 第一個\w 是匹配到空的子串)
-
result[2]
是”e”
-
result.index
是0
-
result.input
是”
She sells seashells by the seashore”
設置了g(global)
屬性的例子:
var
myPattern:RegExp
=
/
(\w
*
)sh(\w
*
)
/
ig;
var
str:String
=
"
She sells seashells by the seashore
"
;
var
result:Object
=
myPattern.exec(str);
while
(result
!=
null
)
{
trace ( result.index,
"
\t
"
, result);
result
=
myPattern.exec(str);
}
輸出:
0
She,,e
10
seashells,sea,ells
27
seashore,sea,ore
2)
Test()
方法:i. 輸入:傳入一個 String 類型的參數,表示要查詢的字符串。
ii. 返回:如果匹配返回 true ,否則返回 false.
例:
var str:String = " a b c " ;
trace (re1.lastIndex); // 0
trace (re1.test(str)); // true
trace (re1.lastIndex); // 1
trace (re1.test(str)); // true
trace (re1.lastIndex); // 3
trace (re1.test(str)); // true
trace (re1.lastIndex); // 5
trace (re1.test(str)); // false
四、 綜合例子:
import flash.display.Sprite;
public class RegExpExample extends Sprite {
public function RegExpExample() {
var formalGreeting:String = " Hello, John Smith. " ;
trace(informalizeGreeting(formalGreeting)); // Hi, John.
var validEmail:String = " [email protected] " ;
trace(validateEmail(validEmail)); // true
var invalidEmail:String = " foo " ;
trace(validateEmail(invalidEmail)); // false
var validPhoneNumber:String = " 415-555-1212 " ;
trace(validatePhoneNumber(validPhoneNumber)); // true
var invalidPhoneNumber:String = " 312-867-530999 " ;
trace(validatePhoneNumber(invalidPhoneNumber)); // false
}
private function informalizeGreeting(str:String):String {
var pattern:RegExp = new RegExp( " hello, (\\w+) \\w+ " , " i " );
return str.replace(pattern, " Hi, $1 " );
}
private function validateEmail(str:String):Boolean {
var pattern:RegExp = / (\w | [_.\ - ]) + @((\w |- ) + \.) + \w { 2 , 4 } +/ ;
var result:Object = pattern.exec(str);
if (result == null ) {
return false ;
}
return true ;
}
private function validatePhoneNumber(str:String):Boolean {
var pattern:RegExp = /^ \d { 3 } - \d { 3 } - \d { 4 } $ / ;
var result:Object = pattern.exec(str);
if (result == null ) {
return false ;
}
return true ;
}
}
}