简介:
正则表达式(Regular Expression),AS3中用于字符串匹配的利器,常用的正则表达式类主要是RegExp。
用法:
RegExp类有两种实例化的方法。
方法一:var samplePattern:RegExp = /sample/g;
方法二:var samplePattern:RegExp = new RegExp(“sample”,”g”);
详解:
由RegExp的两种用法可以看出,正则表达式主要分成两个部分。
方法一中,双斜杠内是一部分,斜杠后是一部分。
方法二中,构造函数的第一个参数是一部分,第二个参数是一部分。
在这两种方法中,前半部分叫做匹配模式(Pattern),用来描述字符串特征;后半部分是正则表达式的标志位,由“gimsx”五个字母集组成,用于设定匹配的模式。
举例如下:
Var samplePattern:RegExp = /sample/g;
Var testString:String = “this is a sample of regular expression. It is really simple”;
Trace(testSting.match(samplePattern)); //匹配第一个“sample”字符,输出:sample
语法:
n 元字符:[]/^$.|?*+() 共十一个字符;
n 普通文字和字母:除元字符外地其他符号(A到z,0到9,#、=等等);
n 不可见字符:
1. /cx匹配x指明的控制字符。如/cM匹配一个Ctrl-M。x只能是A~z之一
2. /f匹配一个换页符,相当于/x0c和/cL
3. /n匹配一个换行符,相当于/x0a和/cJ
4. /r匹配一个回车符,相当于/x0d和/cM
5. /t匹配一个制表符,相当于/x09和/cI
6. /v匹配一个垂直制表符,相当于/x09和/cK
7. /s匹配任何空白字符串,包括空格符、制表符等等,相当于[/f/n/r/t/v];
8. /S匹配任何非空白字符,相当于[^/f/n/r/t/v]
语法实例:
l 连字字符“[]”:
在正则表达式的元字符中,符号“[”和“]”基本上是成对出现的,在两者之间,我们可以定义需要进行匹配的字符集,如/g[eo]t/,匹配字符get和got(注意!并不匹配geot!)。
其中,可以使用“-”来定义一个范围,如/g[a-z]t/,可以匹配gat、gbt、gct…..gzt。例如,匹配一个四位数的年份,可以写成/[0-2][0-9][0-9][0-9]/,这样就可以匹配0000到2999年的年份。
l 取反字符“^”:
/g[^0-9]t/表示匹配除了g0t,g1t,g2t…g9t之外的字符,如gAt,gzt等等。
l 特殊符号“.”
点号(.)在正则表达式中,表示一个模糊的关键字,相当于windows系统进行文件搜索时所用的星号“*”,倘若不知道文件的名字,只知道文件的后缀,可以输入:*.doc,然后进行搜索;那么在正则表达式中,如果不关心被匹配的字符是什么,则可以使用“.”来代替被匹配的字符。举例如下:
var foo:RegExp = /g.t/sg;
var targetStr:String = “g5t g/nt g/rt g-t gtt gst seet”;
trace(targetStr.math(foo));
输出
G5t,g
T,g
T,g-t,gtt,gst
l 选择符“|”
用来匹配多个正则表达式中的一个,如/see|saw/可匹配字符see或者saw;
l 圆括号“()”
圆括号的作用主要是用于将表达式括起来,作为独立的一部分。举一个简单的例子,例如正则表达式//ssee|saw/s/,匹配出来的是/ssee或者是saw/s,如果想匹配/ssee/s或者/ssaw/s,则需要将see|saw这部分独立出来,所以写成//s(see|saw)/s。
l 花括号“{}”
花括号在正则表达式中主要是由于描述字符串的重复,括号内的数字表示重复的次数。例如:
/k{2}a/可匹配字符kka;
/k{1,}a/匹配至少重复1次K,后面紧跟a的字符串(ka,kka,kkka)
/k{1,2}a/匹配重复1或者2次K,后面紧跟a的字符串(如ka,kka,不匹配kkka)
除此之外,正则表达式还提供了一种方便描述一些常见的重复的方法,如:
/wa*/相当于/wa{0,}/,可以匹配出现w紧跟0个或若干a的字符串,如w,wa,waaaa
/wa+/相当于/wa{1,}/,可以匹配出现w紧跟至少1个a的字符串,如wa,waa,waaaa
/wa?/相当于/wa{0,1}/,可以匹配出现w紧跟0个或1个a的字符串,如w,wa
l 用于定位的特殊字符
1. ^匹配输入字符串的开始位置。如果设置了正则表达式的m标志位,^也匹配“/n”“/r”之后的位置
2. $匹配输入字符串的开始位置。如果设置了正则表达式的m标志位,$也匹配“/n”“/r”之后的位置
3. /b匹配一个单词边界,也就是指单词和空格间的位置
4. /B匹配非单词边界
举例如下:
var test:String = "xTorodox";
trace(test.match(//bTor/)); //输出null
trace(test.match(/do/b/)); //输出null
test = "Torodox";
trace(test.match(//bTor/)); //匹配成功,输出Tor
test = "xTorodo";
trace(test.match(/do/b/)); //匹配成功,输出do
trace(test.match(/ro/B/)); //匹配成功,输出ro
test = "Toxor";
trace(test.match(/ro/B/)); //输出null
l 5个标志位
g – global 匹配多个
i – ingnoreCase 忽略大小写,不能用于扩展字符
m – multiline 设置这个标志位后,^$可以匹配行的开头和结尾
s – dotall 设置此标志位后“.”可以匹配/n
x – extended 支持扩展的正则表达式。允许在正则表达式中键入空格,空格将被当作模式的一部分被忽略
l AS3中RegExp类的exec()和test()
Test()检查目标字符串是否包含正则表达式的匹配内容,如果包含则返回true,否则返回false。
Exec()也可以用于检测目标字符串,但是它返回的是Object,Object内包括匹配的字符串、同正则表达式中的任意括号组匹配的子字符串,其次这个数组还有index属性。
举例如下:
var myPattern:RegExp = //bt([a-z])+/b/;
var str:String = "Ok, the theory is not good";
var result:Object = myPattern.exec(str);
trace(result);
trace(result.index);
trace(myPattern.test(str));
输出:
the,e
4
True
String类中与正则表达式相关的方法search()和match()
Search()返回与模式匹配的第一个字符串的索引位置。
Match()返回包含匹配字符串的数组。
举例如下:
var myPattern:RegExp = //bt([a-z])+/b/g;
var str:String = "Ok, the theory is not good";
var result:Object = myPattern.exec(str);
trace(str.search(myPattern));
trace(str.match(myPattern));
trace(str.replace(myPattern,"this"));
输出:
4
the,e
Ok, this theory is not good