3 ActionScript3.0中的正则表达式

来源:互联网 发布:nginx动静分离 编辑:程序博客网 时间:2024/06/01 18:34
================================================
chapter 3 ActionScript3.0中的正则表达式
================================================
先来看一个查找和替换的例子:
var myPattern:RegExp = /Windows/g;
var str:String = "Windows is a excellent operation system. I love
Windows.";
var repStr:String = "Linux";
trace(str.match(myPattern));
//输出:Windows,Windows
trace(str.match(myPattern,repStr));
//输出:Linux is a excellent operation system. I love Linux.
认识正则表达式:
var myPattern:RegExp = /Windows/g;
//正则表达式分为两部分:
一部分:在双斜杠里的,叫做匹配模式(Pattern);
一部分: 在双斜杠外的,叫做修饰符或者标志位;
另外,AS中还有一种写法:
var myPattern:RegExp = new RegExp("Windows","g");
AS3.0中正则表达式的引擎:
正则表达式有两种引擎:DFA引擎和NFA引擎。NFA比DFA应用广泛,因为它支持回调
引用(backreference)和惰性量词(lazy quantifiers)。
但是DFA引擎的执行效率比NFA引擎执行效率高,但更耗内存;NFA没有使用回调引
用时,与DFA的执行效率差不多。
在执行结果上,ActionScript3.0是一种贪婪(Greedy)的执行方式,一旦找到匹配的
内容,立即返回,停止继续搜索。
ActionScript3.0中使用的是功能更加强大的NFA引擎。
实例:
var singleWordPattern:RegExp = /com/;
var targetStr:String = "There is a computer at foo.com";
trace(targetStr.match(singleWordPattern));
//输出:com (是computer的com,不是foo.com的com)
//AS3.0中可以方法链式表达,下面是一个转义特殊字符的例子:
var fooPattern:RegExp = ///g;
//注意,加上g修饰符表示全局匹配,而不是只返回第1个;
var targetStr:String = "http://www.kingda.org/index.html?random=1";
trace("length:" + targetStr.match(fooPattern));
//输出:length:3 表示有3个正斜杠被匹配了
正则表达式的5个修饰符(标识位):
 global  匹配多个
 ignoreCase  不区分大小写
 multiline  设置好此标识后,可以使用$和^来匹配行的开头和结尾
 dotall  设置好此标识后,"." 也可以匹配换行符
 extended  允许扩展正则表达式,可以是正则表达式中键入空格,它将作为模
式的一部分被忽略。这样可以使代码的可读性更高一些。
正则表达式元字符运算优先级
元字符  说明
转义符
(),(?:),(?=),[]  分组定义符号,字符集定义符号
*,+,?,{n},{n,}{n,m}  限定符
^,$,anymetacharacter 顺序和位置
 选择符
RegExp类和字符串结合使用:
RegExp类和字符串结合使用有两个方法:exec()和test();在字符串匹配类中有match
(),replace(),search()和splice()。
RegExp类中的test()方法是检查是否包含正则表达式匹配内容,如果包含,则返回
true,如果不包含,就返回false。
var target:String = "This is a test";
var reg:RegExp = /test/;
trace(reg.test(target));
RegExp类中的exec()方法,也可用于检查是否包含正则表达式匹配内容,如果包含,则
返回一个数组,内容包含匹配的字符串,和正则表达式中括号匹配到的自字符串。
这个数组还有index属性,指明字符串匹配到的索引位置。
以下实例为查找以t为首字母的单词:
var myPattern:RegExp = /bt([a-z]+)b/;
var str:String = "OK,the theory is not good";
var result:Array = myPattern.exec(str);
trace(result);
//输出:the,he
//the是正则表达式匹配到的字符串,he是正则表达式中括号匹配到的字符串
trace(result.index);
//输出: 4 
//正则表达式匹配到的第一个字符串的索引位置
//如果想要多次匹配,可以加上g标识符。
String类的search()和match()
search()方法将返回正则表达式的第一个字符串的索引位置
match()方法将返回正则表达式找到的匹配的字符串
var PatternA:RegExp = /bt([a-z]+)b/;
var str:String = "OK,the theory is not good";
trace(str.search(PatternA));
//输出: 4
trace(str.match(PatternA));
//输出: the,theory
String类的replace()与正则表达式向后引用
String类的replace()需要两个参数,第一个参数是传入的正则表达式,第二个参数是
要替换的字符串。如果正则表达式加了g这个修饰符,则全部替换。
var str:String:"Ok,the the the theory is not good";
var patternA:RegExp = /bt[a-z]b/;
trace(str.replace(patternA,"foo"));
//输出:Ok,foo the the theory is not good
var patternB:RegExp = /bt[a-z]b/g;
trace(str.replace(patternA,"foo"));
//输出:Ok,foo foo foo foo is not good
利用正则表达式消除连续的两个单词:
var str:String = "Ok,we we will do do it";
var patternA:RegExp = /b([a-z]+) 1 b/gi;
trace(str.replace(patternA,"$1"));
//括号里的正则表达式中的第一个括号中匹配的内容可以被$1调用,在括号内可以被
1调用,以此类推。
//输出:Ok,we will do it;