AS3中的正则表达式

  AS3中的正则表达式

一、定义方式,可以有两种

AS3中的正则表达式var pattern1:RegExp = new RegExp("test-\\d", "i");

varpattern2:RegExp=/test-\d/i;

AS3中的正则表达式

1) 使用new来新建一个RegExp对象,其中参数为1)表达式字符串2)表达式的参数,这种方式如果要用\,一定要用\\来转义。

2)直接采用/形式,以把表达式的内容写到/……./里面,在后面跟上表达式的参数,参数字符可以同时添加多个,例如:/………/gi

二、参数介绍

1)Dotall属性,用s字符表示参数,指定字符(.)在表达式里是不是匹配新行,如果使用了s参数,那就表示dotall表示真

例:

AS3中的正则表达式var str:String = "<p>Hello\n"

+"again</p>"

+"<p>Hello</p>";

varpattern: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参数表示,指是否在表达式定义的时候是否忽略空格例:
AS3中的正则表达式var rePhonePattern1:RegExp = /\d{3}-\d{3}-\d{4}|\(\d{3}\)\s?\d{3}-\d{4}/; 

varstr:String="Thephonenumberis(415)555-1212.";

trace(rePhonePattern1.extended)//false

trace(rePhonePattern1.exec(str));//(415)555-1212

varrePhonePattern2: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

AS3中的正则表达式

3)global属性,用g参数表示,指是否用表达式在匹配以后在下次匹配的时候是从头再来还是从上次匹配过的地方开始,其lastIndex属性会保存起来。

例:

AS3中的正则表达式var pattern:RegExp = /foo\d/; 

varstr:String="foo1foo2";

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参数表示,指表达式匹配的时候是否区别大小写。

例:

AS3中的正则表达式var pattern:RegExp = /bob/; 

varstr:String="Bobbob";

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参数表示,指表达式匹配的时候用字符(^)和($)分别表示在之前或之后有新的一行。

例:

AS3中的正则表达式var pattern:RegExp = /^bob/; 

varstr: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属性,返回表达式的定义字符串。

例:

AS3中的正则表达式var re1:RegExp = /aabb/gi;

trace(re1.source);//aabb

varre2:RegExp=newRegExp("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输入的原始字符串。

例:

AS3中的正则表达式var myPattern:RegExp = /(\w*)sh(\w*)/ig;   

varstr:String="Shesellsseashellsbytheseashore";

varresult:Object=myPattern.exec(str);

trace(result);

AS3中的正则表达式

输出:

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

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

<div style="border-right: 1px solid #cccccc; padding: 4px 5px 4px 4px; font-size: 13px; width: 98%; background-color: #eeeeee; border: 1px solid #cccccc;"> <img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif">var  myPattern:RegExp  =   / (\w * )sh(\w * ) / ig;  <p><imgalt=""src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif"> var str:String = " Shesellsseashellsbytheseashore " ;</p> <p><imgalt=""src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif"> var result:Object = myPattern.exec(str);</p> <p><imgalt=""src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockStart.gif"> while (result != null ) {</p> <p><imgalt=""src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif"> trace(result.index, " \t " ,result);</p> <p><imgalt=""src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif"> result = myPattern.exec(str);</p> <p><imgalt=""src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockEnd.gif"> } </p> <p><imgalt=""src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif"> </div> 输出:

0 She,,e</p> <p> 10 seashells,sea,ells</p> <p> 27 seashore,sea,ore</p> <p> 2)Test()方法:

i.输入:传入一个String类型的参数,表示要查询的字符串。

ii.返回:如果匹配返回true,否则返回false.

例:
AS3中的正则表达式var re1:RegExp = /\w/g;

varstr:String="abc";

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

AS3中的正则表达式

四、综合例子:

AS3中的正则表达式package {

importflash.display.Sprite;

publicclassRegExpExampleextendsSprite{

publicfunctionRegExpExample(){

varformalGreeting:String="Hello,JohnSmith.";

trace(informalizeGreeting(formalGreeting));//Hi,John.

varvalidEmail:String="name@domain.com";

trace(validateEmail(validEmail));//true

varinvalidEmail:String="foo";

trace(validateEmail(invalidEmail));//false

varvalidPhoneNumber:String="415-555-1212";

trace(validatePhoneNumber(validPhoneNumber));//true

varinvalidPhoneNumber:String="312-867-530999";

trace(validatePhoneNumber(invalidPhoneNumber));//false

}

privatefunctioninformalizeGreeting(str:String):String{

varpattern:RegExp=newRegExp("hello,(\\w+)\\w+","i");

returnstr.replace(pattern,"Hi,$1");

}

privatefunctionvalidateEmail(str:String):Boolean{

varpattern:RegExp=/(\w|[_.\-])+@((\w|-)+\.)+\w{2,4}+/;

varresult:Object=pattern.exec(str);

if(result==null){

returnfalse;

}

returntrue;

}

privatefunctionvalidatePhoneNumber(str:String):Boolean{

varpattern:RegExp=/^\d{3}-\d{3}-\d{4}$/;

varresult:Object=pattern.exec(str);

if(result==null){

returnfalse;

}

returntrue;

}

}

}

相关推荐