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结合使用,当globaltrue时,执行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包含一个匹配得到的子串,1n包含,其中定义的组所匹配的字符子串
       
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.index0
  • 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;
        }

    }

}

posted on 2006-10-23 13:21  FireYang  阅读(1752)  评论(1编辑  收藏  举报