1.新建正則表達式,有兩種方式
var exp1:RegExp = new RegExp("ABCD","g");
var exp2 = /ABCD/g;//g global 表示全局匹配
trace("ABCDEFABCD".match(exp1));
trace("ABCDEFABCD".match(exp2));//輸出ABCD,ABCD,其中,字條串.match(表達式),返回一個匹配到的數組
2.元字符
1)"." 表示匹配任意單個字符(如:1,e,中,*等),可以是數字,字母,漢字,標點等特殊字符
如:
trace("this is a good Boo*".match(/.oo./g));//返回good,Boo*
但是如果匹配的正則子串本身要包含"."的話,就要用轉義,如:
trace("this is a good Boo.".match(/.oo\./g));//返回Boo.
2)"^" 表示匹配字符串的起始處
(1) trace("ABAFT\nABALYN\nABOUT".replace(/^AB/g,'中國'));//把字符串起始處的"AB"替換爲"中國" 返
回:
中國AFT\nABALYN\nABOUT
輸入後變成:
中國AFT
ABALYN
ABOUT
在多行匹配中,匹配方式指定爲m時,從每個\n後開始匹配
(2) trace("ABAFT\nABALYN\nABOUT".replace(/^AB/gm,'中國'));//m multiline表示多行的意思,即多行匹配
返回:
中國AFT\n中國ALYN\n中國OUT
輸入後變成:
中國AFT
中國ALYN
中國OUT
注意:
trace("ABAFT\nABALYN\nABOUT".replace(/^AB/,'中國'));
trace("ABAFT\nABALYN\nABOUT".replace(/^AB/m,'中國'));
以上兩種方式匹配的結果都與(1)結果一樣,所以要匹配多行時,"g"和"m"要同時使用
3)$ 表示匹配字符串結尾處,在多行匹配字符串中,匹配方式指定爲m時,從每個\n前開始匹配
4)* 表示其前面的字符或表達式出現0次或多次,即任意次,次數>=0,如果0次或多次都滿足的情況,取出現多次
如:/bo*/ 表示o可以出現0次或多次,bo,boo,boook,b,bk都匹配
5)+ 表示其前面的字符或表達式至少出現1次以上,即次數>=1,如果1次或多次滿足的情況,取出現多次
如:/bo+/ 表示o可以出現1次以上,bo,boo,boook都匹配,但b,bk不匹配
6)? 表示其前面的字符哎呀表達式可出現一次也可不出現,如果出現與可不出現兩種都滿足的情況,取出現一次
如:trace("This Book is Good Boooooook BoxBx".replace(/Bo?/g,'一'));
返回:This 一ok is Good 一ooooook 一x一x
其中Book既滿足Bo,又滿足B,也就是說o可出現也可不出現,取第一種情況,Bo
《關於最小匹配和最大匹配(貪婪模式和非貪婪模式)》
".*"
匹配 "內容A" "內容B" "內容C" 結果只有一個匹配結果, 就是"內容A" "內容B" "內容C",
貪心模式儘可能的匹配到更長的內容,於是從第1個雙引號開始直到最後一個雙引號
".*?"
匹配 "內容A" "內容B" "內容C"
結果有3個匹配結果, 分別是"內容A" 和 "內容B" 和 "內容C" . 非貪心模式儘可能少的匹配
7)() 表示把正則表達式的特定串組成一個組,作爲一個整體
如:trace("AGoGo Is A Name AGo's Father".replace(/A(Go)*/g,'哈'));
把Go作爲一個整體,即Go可出現任意次
返回:哈 Is 哈 Name 哈's Father
注意:組可以認爲是正則表達式匹配模式的子模式,可以當做是一個普通的字符進行處理
(1)String.match()和RegExp.exec()捕捉了整個正則匹配的子串,同時捕捉了組匹配的子串
如:
trace("this is a good boboobooobooook".replace(/(bo+)*/,'book'));
bo+表示以b開頭,o出現1次以上,然後再以組的形式出現任意多次
返回:this is a good book
/(bo+)*/ 這裏相當於/(bo+)(bo+)(bo+)(bo+)/
(2)組的反向引用,即把前面定義的組引用過來,如/(bo+).*\1kie/
trace("this book is a goodbookie".replace(/(bo+).*\1kie/,'book'));
返回:this book
/(bo+).*\1kie/ 這裏相當於/(bo+).*(bo+)kie/
(3)?:指定組所匹配的子串不被捕獲
trace("this book is a good bookie".match(/b(o+)k./));
trace("this book is a good bookie".match(/b(?:o+)k./));
返回:
book ,oo
book
(4)?=向前查找,即先匹配,再把符合某個特殊條件的取出來
如:
trace('flashmx flash8 flashcs3 flash4 flash5'.replace(/flash/g,'[FLAHSH]'));
trace('flashmx flash8 flashcs3 flash4 flash5'.replace(/flash(?=cs)/g,'[FLAHSH]'));
返回:
[FLAHSH]mx [FLAHSH]8 [FLAHSH]cs3 [FLAHSH]4 [FLAHSH]5
flashmx flash8 [FLAHSH]cs3 flash4 flash5
/flash(?=cs)/g是在/flash/g的基礎之上加了(?=cs),
這樣符合條件的有flashcs3 flashcs4 flashcs5三項,
?!向後查找,即先匹配,再把符合某個特殊條件的取出來
如:
trace('flashmx flash8 flashcs3 flashcs4 flashcs5'.replace(/flash/g,'[FLAHSH]'));
trace('flashmx flash8 flashcs3 flashcs4 flashcs5'.replace(/flash(?!cs[3-5])/g,'[FLAHSH]'));
返回:
[FLAHSH]mx [FLAHSH]8 [FLAHSH]cs3 [FLAHSH]cs4 [FLAHSH]cs5
[FLAHSH]mx [FLAHSH]8 flashcs3 [FLAHSH]cs4 [FLAHSH]cs5
/flash(?!cs[3-5])/g是在/flash/g基礎之上加了(?!cs[3-5]),
即除了flashcs3,flashcs4,flashcs5以上的所有項
?=與?!相斥
8)[] 表示一個範圍,裏面的字符滿足一個即可
如:/[bk]/ b,k都滿足
/[a-zA-Z0-9] 26個小寫字母,26個大寫字母,10個數字其中任一個都滿足
(1)
trace("32o498dslkfjjlkjLDSJFL70".match(/[^0-9]/g));
trace("32o498dslkfjjlkjLDSJFL7^0".match(/[^0-9]/g));
trace("32o498dslkfjjlkjLDSJFL7^0".match(/[0-9^]/g));
返回: o,d,s,l,k,f,j,j,l,k,j,L,D,S,J,F,L
o,d,s,l,k,f,j,j,l,k,j,L,D,S,J,F,L,^
3,2,4,9,8,7,^,0
如果把^放在[]字符集的開始處,表示取反的意思,如[^0-9],表示非數字,相當於\D
如果把^放在[]字符集的開始處,且被匹配的字符串含有^字符時,即表示取反的意思,又把^作爲一個普
通字符來看待,這樣,非數字和^都滿足,如上面的第二trace()
(2)在字符集中,"." 並不是一個元字符,而是當作一個普通字符看待,相當於用"\."轉義
trace('sdfdsfdfl34l3re.'.match(/[0-9.]/g));
trace('sdfdsfdfl34l3re.'.match(/[0-9\.]/g));
返回:
3,4,3,.
3,4,3,.
(3)在字符集中,只有"-"和"\"是被認爲是轉義的,
如:[0-9] 表示從0到9的任一數字
[\n\t] 表示\n換行和\t製表位
trace('ldslfasdasd\nksdjlsd\t324123424'.replace(/[\n\t]/g,'轉義'));
返回:ldslfasdasd轉義ksdjlsd轉義324123424
9)| 表示任選一,與[]功能相似
如:/b|k/ b,k都滿足
/gook|book/ gook,book都滿足
trace("this is a good cook book".replace(/good|book/g,'哈'));
返回:this is a 哈 cook 哈
注意:(1)
trace("this is a good book".replace(/[gk]/g,'哈'));
trace("this is a good book".replace(/g|k/g,'哈'));
返回:this is a 哈ood boo哈
this is a 哈ood boo哈
以上兩個表達式效果是一樣的
但是:trace("this is a good cook book".replace(/good|book/g,'哈'));
trace("this is a good cook book".replace(/[goodbook]/g,'哈'));
返回:this is a 哈 cook 哈
this is a 哈哈哈哈 c哈哈哈 哈哈哈哈
以上兩個表達式效果是不一樣的,因爲|把good和book作爲一個整體,而[]把good和book
合在一起,即goodbook,也就是說只要滿足g,o,d,b,k其中任意一個字符就行了
10)- 表示一個範圍,與[]一起用
如:trace("lLJ62-76DS5LFd-4Jlk-中國".match(/[a-z\-]/g));
[a-z\-]其中,a-z中的"-"是一個元字符,表示從a到z的一個範圍,而\-轉義後表示"-"字符
3.元序列
1){n}表示在它前面的字符或表達式必須重複n次,即次數=n
如: /bo{2}/,其中o要重複2次,boo滿足,boook不滿足
2){n,}表示在它前面的字符或表達式必須重複n次以上,即次數>=n,如果既滿足n,又滿足n+1,取n+1,即取最大的
如: /bo{2,}/,其中o要重複2次以上,boo滿足,boook也滿足
3){n,m}表示在它前面的字符或表達式必須重複n到m次以上,即n<=次數<=m,如果既滿足n,又滿足n+1,取n+1,即取最大的
如:
trace("This Book is Good Boooooook BoxBx".replace(/Bo{2,6}/g,'哈'));
返回:This 哈k is Good 哈ok BoxBx
trace("This Book is Good Boook BoxBx".replace(/Bo{2,6}/g,'哈'));
返回:This 哈k is Good 哈k BoxBx
4)\d 表示匹配數字字符,即0-9
\D 表示匹配非數字字符,與\d,即除了0-9之外的字符
\w 表示匹配一個單詞字符,即26個小寫字母,26個大寫字母,10個數字,和下劃線
\W 表示匹配非單詞字符,與\w反義
\s 表示匹配任意空白字符
\S 表示匹配任意非空間字符,與\s反義
4.標記
i ignoreCase 忽略大小寫
g global 全局匹配
m multiline 多行模式
s dotall 指定元字符"."是否匹配"\n",即"\n"也作爲一個普通字符處理
如:
trace("this is a book\nkie".replace(/bo+k.kie/g,'哈'));
trace("this is a book\nkie".replace(/bo+k.kie/gs,'哈'));//在這裏,\n被看成是一個普通字符
返回:
this is a book
kie
this is a 哈
x extend 擴展模式,在擴展模式下,正則表示式的空白字符被忽略了,如/c _ d/ 的效果相當於 /c_d/
5.正則表達式的屬性
source 可得到正則表達式的匹配模式,如:trace(/\d\d/.source);輸出:\d\d
lastIndex 表示正則表達式在字符串中的起始匹配位置,只有當標記爲g時才起作用
6.正則表達式的方法
exec(字符串) 返回一個Object
test(字符串) 返回一個Boolean值
2012/4/20 補充:
AS3正則表達式只能匹配同一行的內容,如果匹配的內容分散到多行是匹配不到的;
所以,如果必要應該先把換行符替換掉(content = content.replace(/\n/gi, "");)
然後再做其它匹配。
轉自我的百度空間:http://hi.baidu.com/wojiubaibudu/item/20259da5991a8cdd5bf1910f