AS3中的正则表达式
AS3中的正则表达式
一、定义方式,可以有两种
varpattern2:RegExp=/test-\d/i;
1) 使用new来新建一个RegExp对象,其中参数为1)表达式字符串2)表达式的参数,这种方式如果要用\,一定要用\\来转义。
2)直接采用/形式,以把表达式的内容写到/……./里面,在后面跟上表达式的参数,参数字符可以同时添加多个,例如:/………/gi
二、参数介绍
1)Dotall属性,用s字符表示参数,指定字符(.)在表达式里是不是匹配新行,如果使用了s参数,那就表示dotall表示真
例:
+"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));
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
3)global属性,用g参数表示,指是否用表达式在匹配以后在下次匹配的时候是从头再来还是从上次匹配过的地方开始,其lastIndex属性会保存起来。
例:
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
例:
varstr:String="Bobbob";
trace(pattern.ignoreCase);//false
trace(pattern.exec(str));//bob
pattern=/bob/i;
trace(pattern.ignoreCase);//true
trace(pattern.exec(str));//Bob
这个属性要和global结合使用,当global为true时,执行exec()和test()后,lastIndex属性会被设置为下一个字符,如果是false,则会从头开始。
例:
6)multiline属性,用m参数表示,指表达式匹配的时候用字符(^)和($)分别表示在之前或之后有新的一行。
例:
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
例:
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输入的原始字符串。
例:
varstr:String="Shesellsseashellsbytheseashore";
varresult: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)
属性的例子:
<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.
例: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
四、综合例子:
importflash.display.Sprite;
publicclassRegExpExampleextendsSprite{
publicfunctionRegExpExample(){
varformalGreeting:String="Hello,JohnSmith.";
trace(informalizeGreeting(formalGreeting));//Hi,John.
varvalidEmail:String="[email protected]";
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;
}
}
}