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  =   " name@domain.com " ;
            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 ;
        }

    }

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值