AS3中的正则表达式(原创)

本文介绍了AS3中正则表达式的定义方式及其多种参数的使用方法,包括dotall、extended、global等,并通过实例详细解释了每个参数的功能。此外,还介绍了exec()和test()等方法的应用场景。
  AS3中的正则表达式
一、定义方式,可以有两种
None.gifvar pattern1:RegExp = new RegExp("test-\\d""i");
None.gif
var pattern2:RegExp = /test-\d/i;
None.gif

1) 使用new来新建一个RegExp对象,其中参数为1)表达式字符串2)表达式的参数,这种方式如果要用\,一定要用\\来转义。
2) 直接采用/形式,以把表达式的内容写到/……./里面,在后面跟上表达式的参数,参数字符可以同时添加多个,例如:/………/gi
二、参数介绍
1)Dotall属性,用s字符表示参数,指定字符(.)在表达式里是不是匹配新行,如果使用了s参数,那就表示dotall表示真
例:
None.gifvar str:String = "<p>Hello\n"
None.gif                  
+ "again</p>"
None.gif                  
+ "<p>Hello</p>";            
None.gif
var pattern:RegExp = /<p>.*?<\/p>/;
None.giftrace(pattern.dotall) 
// false
None.gif
trace(pattern.exec(str)); // <p>Hello</p>
None.gif
pattern = /<p>.*?<\/p>/s;
None.giftrace(pattern.dotall) 
// true
None.gif
trace(pattern.exec(str)); 
None.gif
2)Extended属性,用x参数表示,指是否在表达式定义的时候是否忽略空格
例:
ExpandedBlockStart.gifContractedBlock.gifvar rePhonePattern1:RegExp = /\ddot.gif{3}-\ddot.gif{3}-\ddot.gif{4}|\(\ddot.gif{3}\)\s?\ddot.gif{3}-\ddot.gif{4}/
None.gif
var str:String = "The phone number is (415)555-1212.";
None.gif 
None.giftrace(rePhonePattern1.extended) 
// false
None.gif
trace(rePhonePattern1.exec(str)); // (415)555-1212
None.gif
 
ExpandedBlockStart.gifContractedBlock.gif
var rePhonePattern2:RegExp = / \ddot.gif{3}-\ddot.gif{3}-\ddot.gif{4} |   \( \ddot.gif{3} \) \ ? \ddot.gif{3}-\ddot.gif{4} /x; 
None.giftrace(rePhonePattern2.extended) 
// true
None.gif
trace(rePhonePattern2.exec(str)); // (415)555-1212
None.gif
 
None.gif

3)global属性,用g参数表示,指是否用表达式在匹配以后在下次匹配的时候是从头再来还是从上次匹配过的地方开始,其lastIndex属性会保存起来。
例:
None.gifvar pattern:RegExp = /foo\d/
None.gif
var str:String = "foo1 foo2";
None.giftrace(pattern.global); 
// false
None.gif
trace(pattern.exec(str)); // foo1
None.gif
trace(pattern.lastIndex); // 0
None.gif
trace(pattern.exec(str)); // foo1
None.gif
 
None.gifpattern 
= /foo\d/g;
None.giftrace(pattern.global); 
// true
None.gif
trace(pattern.exec(str)); // foo1
None.gif
trace(pattern.lastIndex); // 4
None.gif
trace(pattern.exec(str)); // foo2
None.gif
4)ignoreCase属性,用i参数表示,指表达式匹配的时候是否区别大小写。
例:
None.gifvar pattern:RegExp = /bob/
None.gif
var str:String = "Bob bob";
None.giftrace(pattern.ignoreCase); 
// false
None.gif
trace(pattern.exec(str)); // bob
None.gif
 
None.gifpattern 
= /bob/i;
None.giftrace(pattern.ignoreCase); 
// true
None.gif
trace(pattern.exec(str)); // Bob
None.gif
5)lastIndex属性,指定下次查询的起始位置,这个属性影响两个方法exec()和test(),match(),replace(),search()方法是忽略这个属性的,他们总是从头开始的。
这个属性要和global结合使用,当global为true时,执行exec()和test()后,lastIndex属性会被设置为下一个字符,如果是false,则会从头开始。
例:
6)multiline属性,用m参数表示,指表达式匹配的时候用字符(^)和($)分别表示在之前或之后有新的一行。
例:
None.gifvar pattern:RegExp = /^bob/
None.gif
var str:String = "foo\n"
None.gif                
+ "bob";
None.giftrace(pattern.multiline); 
// false
None.gif
trace(pattern.exec(str)); // null
None.gif
 
None.gifpattern 
= /^bob/m;
None.giftrace(pattern.multiline); 
// true
None.gif
trace(pattern.exec(str)); // bob
None.gif
7)source属性,返回表达式的定义字符串。
例:
None.gifvar re1:RegExp = /aabb/gi;
None.giftrace (re1.source); 
// aabb
None.gif
 
None.gif
var re2:RegExp = new RegExp("x+y*""i");
None.giftrace(re2.source); 
// x+y*
None.gif
三、方法介绍
       1) Exec()方法: 
                        i.  输入:传入一个String类型的参数,表示要查询的字符串。
                        ii.   返回:如果没有匹配到就返回null,否则返回一个Object对象。
     这个Object对象的属性:
        a)  一个Array(数组),元素0包含一个匹配得到的子串,1到n包含,其中定义的组所匹配的字符子串
        b) Index匹配子串在字符串里的位置
        c) Input输入的原始字符串。
例:
None.gifvar myPattern:RegExp = /(\w*)sh(\w*)/ig;   
None.gif         
var str:String = "She sells seashells by the seashore";
None.gif         
var result:Object = myPattern.exec(str);
None.gif         trace(result);
None.gif

输出:
  • result[0]是”she”
  • result[1]是一个空串(第一个\w是匹配到空的子串)
  • result[2]是”e”
  • result.index是0
  • result.input是” She sells seashells by the seashore”

设置了g(global)属性的例子:

None.gifvar myPattern:RegExp = /(\w*)sh(\w*)/ig; 
None.gif       
var str:String = "She sells seashells by the seashore";
None.gif       
var result:Object = myPattern.exec(str);
ExpandedBlockStart.gifContractedBlock.gif                  
while (result != nulldot.gif{
InBlock.gif             trace ( result.index, 
"\t", result);
InBlock.gif             result 
= myPattern.exec(str);
ExpandedBlockEnd.gif        }

None.gif
      输出:
            0      She,,e
            10     seashells,sea,ells
            27     seashore,sea,ore
   
2)        Test()方法:
                        i.              输入:传入一个String类型的参数,表示要查询的字符串。
                       ii.              返回:如果匹配返回true,否则返回false.
例:
None.gifvar re1:RegExp = /\w/g;
None.gif
var str:String = "a b c";
None.giftrace (re1.lastIndex); 
// 0
None.gif
trace (re1.test(str)); // true
None.gif
trace (re1.lastIndex); // 1
None.gif
trace (re1.test(str)); // true
None.gif
trace (re1.lastIndex); // 3
None.gif
trace (re1.test(str)); // true
None.gif
trace (re1.lastIndex); // 5
None.gif
trace (re1.test(str)); // false
None.gif

四、综合例子:
ExpandedBlockStart.gifContractedBlock.gifpackage dot.gif{
InBlock.gif
InBlock.gif    import flash.display.Sprite;
InBlock.gif 
ExpandedSubBlockStart.gifContractedSubBlock.gif    public class RegExpExample extends Sprite 
dot.gif{        
ExpandedSubBlockStart.gifContractedSubBlock.gif        public 
function RegExpExample() dot.gif{            
InBlock.gif            
var formalGreeting:String = "Hello, John Smith.";
InBlock.gif            trace(informalizeGreeting(formalGreeting));    
// Hi, John.
InBlock.gif
 
InBlock.gif            
var validEmail:String = "name@domain.com";
InBlock.gif            trace(validateEmail(validEmail));        
// true
InBlock.gif
            
InBlock.gif            
var invalidEmail:String = "foo";
InBlock.gif            trace(validateEmail(invalidEmail)); 
// false
InBlock.gif
            
InBlock.gif            
var validPhoneNumber:String = "415-555-1212";
InBlock.gif            trace(validatePhoneNumber(validPhoneNumber));    
// true
InBlock.gif
            
InBlock.gif            
var invalidPhoneNumber:String = "312-867-530999";
InBlock.gif            trace(validatePhoneNumber(invalidPhoneNumber)); 
// false
ExpandedSubBlockEnd.gif
        }

ExpandedSubBlockStart.gifContractedSubBlock.gif        private 
function informalizeGreeting(str:String):String dot.gif{
InBlock.gif            
var pattern:RegExp = new RegExp("hello, (\\w+) \\w+""i");
InBlock.gif            
return str.replace(pattern, "Hi, $1");
ExpandedSubBlockEnd.gif        }

ExpandedSubBlockStart.gifContractedSubBlock.gif        private 
function validateEmail(str:String):Boolean dot.gif{
ExpandedSubBlockStart.gifContractedSubBlock.gif            
var pattern:RegExp = /(\w|[_.\-])+@((\w|-)+\.)+\wdot.gif{2,4}+/;
InBlock.gif            
var result:Object = pattern.exec(str);
ExpandedSubBlockStart.gifContractedSubBlock.gif            
if(result == nulldot.gif{
InBlock.gif                
return false;
ExpandedSubBlockEnd.gif            }

InBlock.gif            
return true;
ExpandedSubBlockEnd.gif        }

ExpandedSubBlockStart.gifContractedSubBlock.gif        private 
function validatePhoneNumber(str:String):Boolean dot.gif{
ExpandedSubBlockStart.gifContractedSubBlock.gif            
var pattern:RegExp = /^\ddot.gif{3}-\ddot.gif{3}-\ddot.gif{4}$/;
InBlock.gif            
var result:Object = pattern.exec(str);
ExpandedSubBlockStart.gifContractedSubBlock.gif            
if(result == nulldot.gif{
InBlock.gif                
return false;
ExpandedSubBlockEnd.gif            }

InBlock.gif            
return true;
ExpandedSubBlockEnd.gif        }

ExpandedSubBlockEnd.gif    }

ExpandedBlockEnd.gif}

None.gif

转载于:https://www.cnblogs.com/FireYang/archive/2006/10/23/537192.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值