摘自:http://www.cnblogs.com/fireyang/archive/2006/10/23/537192.html
AS3中的正则表达式
一、定义方式,可以有两种
var
pattern1:RegExp
=
new
RegExp(
"
test-//d
"
,
"
i
"
);
var pattern2:RegExp = / test - /d / i;
1)
使用
new
来新建一个
RegExp
对象,其中参数为
1
)表达式字符串
2
)表达式的参数,这种方式如果要用
/,
一定要用
//
来转义。var pattern2:RegExp = / test - /d / i;
2) 直接采用 / 形式,以把表达式的内容写到 /……./ 里面,在后面跟上表达式的参数,参数字符可以同时添加多个,例如: /………/gi
二、 参数介绍
1) Dotall 属性,用 s 字符表示参数,指定字符( . )在表达式里是不是匹配新行,如果使用了 s 参数,那就表示 dotall 表示真
例:
var
str:String
=
"
<p>Hello/n
"
+ " again</p> "
+ " <p>Hello</p> " ;
var pattern: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
参数表示,指是否在表达式定义的时候是否忽略空格+ " again</p> "
+ " <p>Hello</p> " ;
var pattern: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));
例:
var
rePhonePattern1:RegExp
=
/
/d
{3}
-
/d
{3}
-
/d
{4}
|
/(/d
{3}
/)/s
?
/d
{3}
-
/d
{4}
/
;
var str:String = " The phone number is (415)555-1212. " ;
trace(rePhonePattern1.extended) // false
trace(rePhonePattern1.exec(str)); // (415)555-1212
var rePhonePattern2: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
属性会保存起来。var str:String = " The phone number is (415)555-1212. " ;
trace(rePhonePattern1.extended) // false
trace(rePhonePattern1.exec(str)); // (415)555-1212
var rePhonePattern2: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
例:
var
pattern:RegExp
=
/
foo/d
/
;
var str:String = " foo1 foo2 " ;
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
参数表示,指表达式匹配的时候是否区别大小写。var str:String = " foo1 foo2 " ;
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
例:
var
pattern:RegExp
=
/
bob
/
;
var str:String = " Bob bob " ;
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()
方法是忽略这个属性的,他们总是从头开始的。var str:String = " Bob bob " ;
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 参数表示,指表达式匹配的时候用字符( ^ )和( $ )分别表示在之前或之后有新的一行。
例:
var
pattern:RegExp
=
/^
bob
/
;
var str: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
属性,返回表达式的定义字符串。var str: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
例:
var
re1:RegExp
=
/
aabb
/
gi;
trace (re1.source); // aabb
var re2:RegExp = new RegExp( " x+y* " , " i " );
trace(re2.source); // x+y*
三、
方法介绍trace (re1.source); // aabb
var re2:RegExp = new RegExp( " 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 输入的原始字符串。
例:
var
myPattern:RegExp
=
/
(/w
*
)sh(/w
*
)
/
ig;
var str:String = " She sells seashells by the seashore " ;
var result:Object = myPattern.exec(str);
trace(result);
输出:
var str:String = " She sells seashells by the seashore " ;
var result: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)属性的例子:
var
myPattern:RegExp
=
/
(/w
*
)sh(/w
*
)
/
ig;
var str:String = " She sells seashells by the seashore " ;
var result:Object = myPattern.exec(str);
while (result != null ) {
trace ( result.index, "/t", result);
result = myPattern.exec(str);
}
var str:String = " She sells seashells by the seashore " ;
var result:Object = myPattern.exec(str);
while (result != null ) {
trace ( result.index, "/t", result);
result = myPattern.exec(str);
}
输出: 0 She,,e
10 seashells,sea,ells
27 seashore,sea,ore
2) Test()方法:
i. 输入:传入一个String类型的参数,表示要查询的字符串。
ii. 返回:如果匹配返回true,否则返回false.
例:
var
re1:RegExp
=
/
/w
/
g;
var str:String = " a b c " ;
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
四、
综合例子:
var str:String = " a b c " ;
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
package
{
import flash.display.Sprite;
public class RegExpExample extends Sprite {
public function RegExpExample() {
var formalGreeting:String = "Hello, John Smith.";
trace(informalizeGreeting(formalGreeting)); // Hi, John.
var validEmail:String = "name@domain.com";
trace(validateEmail(validEmail)); // true
var invalidEmail:String = "foo";
trace(validateEmail(invalidEmail)); // false
var validPhoneNumber:String = "415-555-1212";
trace(validatePhoneNumber(validPhoneNumber)); // true
var invalidPhoneNumber:String = "312-867-530999";
trace(validatePhoneNumber(invalidPhoneNumber)); // false
}
private function informalizeGreeting(str:String):String {
var pattern:RegExp = new RegExp("hello, (//w+) //w+", "i");
return str.replace(pattern, "Hi, $1");
}
private function validateEmail(str:String):Boolean {
var pattern:RegExp = /(/w|[_./-])+@((/w|-)+/.)+/w{2,4}+/;
var result:Object = pattern.exec(str);
if(result == null) {
return false;
}
return true;
}
private function validatePhoneNumber(str:String):Boolean {
var pattern:RegExp = /^/d{3}-/d{3}-/d{4}$/;
var result:Object = pattern.exec(str);
if(result == null) {
return false;
}
return true;
}
}
}
import flash.display.Sprite;
public class RegExpExample extends Sprite {
public function RegExpExample() {
var formalGreeting:String = "Hello, John Smith.";
trace(informalizeGreeting(formalGreeting)); // Hi, John.
var validEmail:String = "name@domain.com";
trace(validateEmail(validEmail)); // true
var invalidEmail:String = "foo";
trace(validateEmail(invalidEmail)); // false
var validPhoneNumber:String = "415-555-1212";
trace(validatePhoneNumber(validPhoneNumber)); // true
var invalidPhoneNumber:String = "312-867-530999";
trace(validatePhoneNumber(invalidPhoneNumber)); // false
}
private function informalizeGreeting(str:String):String {
var pattern:RegExp = new RegExp("hello, (//w+) //w+", "i");
return str.replace(pattern, "Hi, $1");
}
private function validateEmail(str:String):Boolean {
var pattern:RegExp = /(/w|[_./-])+@((/w|-)+/.)+/w{2,4}+/;
var result:Object = pattern.exec(str);
if(result == null) {
return false;
}
return true;
}
private function validatePhoneNumber(str:String):Boolean {
var pattern:RegExp = /^/d{3}-/d{3}-/d{4}$/;
var result:Object = pattern.exec(str);
if(result == null) {
return false;
}
return true;
}
}
}