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

     输出:
               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 {
    importflash.display.Sprite;
    public classRegExpExample 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 @ 2011-02-17 17:50  rob_2010  阅读(435)  评论(0编辑  收藏  举报