转载:http://hi.baidu.com/410838107/item/454dbad828a590826dce3f8f
match 方法
使用正则表达式模式对字符串执行查找,并将包含查找的结果作为数组返回。
1
2
3
4
5
6
|
function
MatchDemo(){
var
r, re;
// 声明变量。
var
s =
"The rain in Spain falls mainly in the plain"
;
re = /(a)
in
/ig;
// 创建正则表达式模式。
r = s.match(re);
// 尝试去匹配搜索字符串。
document.write(r);
// 返回的数组包含了所有 "ain" 出现的四个匹配,
r[0]、r[1]、r[2]、r[3]。
// 但没有子匹配项a。}
|
输出结果:ain,ain,ain,ain
exec 方法
1
2
3
4
5
6
7
8
9
10
11
12
13
|
function
RegExpTest(){
var
src=
"http://sumsung753.blog.163.com/blog/I love you!"
;
var
re = /\w+/g;
// 注意g将全文匹配,不加将永远只返回第一个匹配。
var
arr;
while
((arr = re.exec(src)) !=
null
){
//exec使arr返回匹配的第一个,while循环一次将使re在g作用寻找下一个匹配。
document.write(arr.index +
"-"
+ arr.lastIndex +
":"
+ arr +
"
);
for
(key
in
arr){
document.write(key +
"=>"
+ arr[key] +
"
);
}
document.write(
"
);
}
}
window.onload = RegExpTest();
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
0-1:I //0为index,i所在位置,1为下一个匹配所在位置
input=>I love you!
index=>0
lastIndex=>1
0=>I
2-6:love
input=>I love you!
index=>2
lastIndex=>6
0=>love
7-10:you
input=>I love you!
index=>7
lastIndex=>10
0=>you
|
代码如下:
1
2
3
4
5
6
7
8
9
10
11
|
function
execDemo(){
var
r, re;
// 声明变量。
var
s =
"The rain in Spain falls mainly in the plain"
;
re = /[\w]*(ai)n/ig;
r = re.exec(s);
document.write(r +
"
);
for
(key
in
r){
document.write(key +
"-"
+ r[key] +
"
);
}
}
window.onload = execDemo();
|
1
2
3
4
5
6
7
8
9
|
function
TestDemo(re, s){
var
s1;
if
(re.test(s))
s1 =
" 匹配正则式 "
;
else
s1 =
" 不匹配正则式 "
;
return
(
"'"
+ s +
"'"
+ s1 +
"'"
+ re.source +
"'"
);
}
window.onload = document.write(TestDemo(/ab/,
'cdef'
));
|
1
2
3
4
5
6
7
8
9
|
function
testDemo(){
var
r, re;
// 声明变量。
var
s =
"I"
;
re = /I/ig;
// 创建正则表达式模式。
document.write(re.test(s) +
"
);
// 返回 Boolean 结果。
document.write(re.test(s) +
"
);
document.write(re.test(s));
}
testDemo();
|
1
2
3
4
5
6
7
8
|
function
testDemo(){
var
r, re;
// 声明变量。
var
s =
"I"
;
re = /I/ig;
// 创建正则表达式模式。
document.write(re.test(s) +
"
);
// 返回 Boolean 结果。
document.write(re.lastIndex);
// 返回 Boolean 结果。
}
testDemo();
|
1
2
3
4
5
6
7
8
9
10
|
function
SearchDemo(){
var
r, re;
// 声明变量。
var
s =
"The rain in Spain falls mainly in the plain."
;
re = /falls/i;
// 创建正则表达式模式。
re2 = /tom/i;
r = s.search(re);
// 查找字符串。
r2 = s.search(re2);
return
(
"r:"
+ r +
";r2:"
+ r2);
// 返回 Boolean 结果。
}
document.write(SearchDemo());
|
1
2
3
4
5
6
7
8
9
10
11
12
|
function
f2c(s) {
var
test = /(\d+(\.\d*)?)F\b/g;
// 说明华氏温度可能模式有:123F或123.4F。注意,这里用了g模式
return
(s.replace
(test,
function
(Regstr,$1,$2,$3,newstrObj) {
return
((
"
+ Regstr +
"
+ ($1-32) * 1/2) +
"C"
+
"
+
//以下两行进行替换
$2 +
"
+ $3 +
"
+ newstrObj +
"
);
}
)
);
}
document.write(f2c(
"Water: 32.2F and Oil: 20.30F."
));
|
1
2
3
4
5
6
7
8
9
10
11
|
function
f2c(s) {
var
test = /(\d+(\.\d*)?)F\b/g;
// 说明华氏温度可能模式有:123F或123.4F
return
(s.replace
(test,
function
(strObj,$1) {
return
((($1-32) * 1/2) +
"C"
);
}
)
);
}
document.write(f2c(
"Water: 32.2F and Oil: 20.30F."
));
|
1
2
3
4
5
6
7
8
9
10
11
|
function
f2c(s) {
var
test = /([\d]{4})-([\d]{1,2})-([\d]{1,2})/;
return
(s.replace
(test,
function
($0,$1,$2,$3) {
return
($2 +
"/"
+ $1);
}
)
);
}
document.write(f2c(
"today: 2011-03-29"
));
|
1
2
3
4
5
6
7
8
|
function
SplitDemo(){
var
s, ss;
var
s =
"The rain in Spain falls mainly in the plain."
;
// 正则表达式,用不分大不写的s进行分隔。
ss = s.split(/s/i);
return
(ss);
}
document.write(SplitDemo());
|
先看代码:
1
2
3
4
5
|
var
sToMatch =
"test, Tes, tst, tset, Test, Tesyt, sTes"
;
var
reEs = /es/gi;
alert(reEs.exec(sToMatch));
alert(sToMatch.match(reEs));
alert(sToMatch.search(reEs));
|
三个弹出框内容如下:
结果分析如下:
1、RegExp的exec()方法,有一个字符串参数,返回一个数组,数组的第一个条目是第一个匹配;其他的是反向引用。所以第一个返回的结果是第一个匹配的值es(不区分大小写)。
2、String对象有一个match()方法,它返回一个包含在字符串中所有匹配的数据。这个方法调用string对象,同时传给它一个RegExp对象。所以第二个弹出语句返回的是所有符合正则表达式的数组。
3、search()的字符串方法与indexOf()有些类似,但是它使用一个RegExp对象而非仅仅一个子字符串。search()方法返回第一个匹配值的位置。所以第三处弹出的是“1”,即第二个字符就匹配了。注意的是search()方法不支持全局匹配正规表达式(带参数g)。