AS3中的正則表達式

  AS3 中的正則表達式
一、 定義方式,可以有兩種

var  pattern1:RegExp  =   new  RegExp( " test-\\d " " i " );
var  pattern2:RegExp  =   / test - \d / i;

1)  使用 new 來新建一個 RegExp 對象,其中參數爲 1 )表達式字符串 2 )表達式的參數,這種方式如果要用 \, 一定要用 \\ 來轉義。
2)  直接採用 / 形式,以把表達式的內容寫到 /……./ 裏面,在後面跟上表達式的參數,參數字符可以同時添加多個,例如: /………/gi
二、 參數介紹
1) Dotall 屬性,用 s 字符表示參數,指定字符( . )在表達式裏是不是匹配新行,如果使用了 s 參數,那就表示 dotall 表示真
例:

var  str:String  =   " <p>Hello\n "
                  
+   " 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)); 
2) Extended 屬性,用 x 參數表示,指是否在表達式定義的時候是否忽略空格
例:
var  rePhonePattern1:RegExp  =   / \d { 3 } - \d { 3 } - \d { 4 } | \(\d { 3 } \)\s ? \d { 3 } - \d { 4 } /
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  pattern:RegExp  =   / foo\d /
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
4) ignoreCase 屬性,用 i 參數表示,指表達式匹配的時候是否區別大小寫。
例:
var  pattern:RegExp  =   / bob /
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
5) lastIndex 屬性,指定下次查詢的起始位置,這個屬性影響兩個方法 exec() test() match() replace() search() 方法是忽略這個屬性的,他們總是從頭開始的。
這個屬性要和 global 結合使用,當 global true 時,執行 exec() test() 後, lastIndex 屬性會被設置爲下一個字符,如果是 false ,則會從頭開始。
例:
6) multiline 屬性,用 m 參數表示,指表達式匹配的時候用字符( ^ )和( $ )分別表示在之前或之後有新的一行。
例:
var  pattern:RegExp  =   /^ bob /
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
7) source 屬性,返回表達式的定義字符串。
例:
var  re1:RegExp  =   / aabb / gi;
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  myPattern:RegExp  =   / (\w * )sh(\w * ) / ig;   
         
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  re1:RegExp  =   / \w / g;
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

四、 綜合例子:

package  {

    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 ;
        }

    }

}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章