正则表达式模式匹配的String方法
String对象中支持正则表达式有4种方法,分别是:search、replace、match、split
str.search(regexp)
定义:search()方法将在字符串str中检索与表达式regexp相匹配的字串,并且返回第一个匹配字串的第一个字符的位置。如果没有找到任何匹配的字串,则返回-1。
例如:
?
1
2
3 varstr="Javascript";
str.search(/script/);//返回script中s的位置为4
str.search(/j/i);//设置正则表达是标识i:忽略大小写,则匹配到J,返回位置0 ?
1
2 varstr="javascriptiscool";
str.search(/s/g);//返回javascript中的s位置4,不会继续检索s ?
1
2 varstr="javascript";
str.replace(/javascript/,''JavaScript'');//将字符串javascript替换为JavaScript ?
1
2
3 //使用全局表示g进行全局替换
varstr="javascript";
str.replace(/a/g,''b'');//将所有的字母a替换为字母b,返回jbvbscript 字符 替换文本 $1、$2、...、$99 与regexp中的第1个到99个子表达式相匹配的文本 $& 与regexp相匹配的字串 $` 位于匹配子串左侧的文本 $'' 位于匹配子串右侧的文本 $$ 直接量符号 ?
1
2
3
4
5
6
7
8
9
10
11
12
13 //1、用子表达式替换:$1、$2等
varstr="javascript";
str.replace(/(java)(script)/,''$2$1'');?
//表达式中()就是一个子表达式,$1对应是第一个表达式的内容,即java,$2为script,所以替换结果为:scriptjava?
//2、$&为正值表达式匹配的字串
varstr="javascript";
str.replace(/java/,''$&-'');?
//正则表达式通过直接量java来匹配,匹配结果为java,则$&的值为java,然后用字符串$&-来替换匹配的字串,结果为java-script
//3、$`$''$$
varstr="javascript";
str.replace(/ava/,"$`");//$`为匹配子串ava的左侧文本,则为j,则替换后ava的结果为:jjscript
str.replace(/ava/,"$''");//$''为匹配子串ava的右侧文本,则为script,则替换ava的结果为:jscriptscript
str.replace(/ava/,"$$");//$$为直接量符号,即插入一个$符号,替换结果为:j$script ?
1
2
3
4
5
6
7
8
9
10
11 //match为匹配整个字符串,即:''abc12345#$%''
//p1为第一个子表达式,([^\d]),匹配0个或多个非数字的字符,即:abc
//p2为第二个子表达式,(\d),匹配0个或多个的数字,即:12345
//p3为第三个子表达式,([^\w]),匹配0个或匹配任何非单词字符。等价于''[^A-Za-z0-9_]'',即#$%
//offset为模式匹配出现的位置,从第一个字符已经匹配成功,则位置为0
//string为字符串本身,即abc12345#$%
functionreplacer(match,p1,p2,p3,offset,string){
return[p1,p2,p3].join(''-'');
}
varnewString=''abc12345#$%''.replace(/([^\d])(\d)([^\w])/,replacer);?
//替换结果为:abc-12345-#$% ?
1
2
3 //全局匹配
varstr="1plus2equals3";
str.match(/\d/g);//匹配字符串中出现的所有数字,并返回一个数组:[1,2,3] ?
1
2
3
4
5
6 //非全局匹配
varstr="visitmyblogatwww.hunanwang.net";
str.match(/(\w+):\/\/([\w.]+)/);//返回结果:["www.visa158.com","http","www.example.com"]
//正则表达式匹配的结果为:www.shanxiwang.net
//第一个子表达式(\w+)匹配结果:http
//第二个子表达式([\w.])匹配结果:www.example.com str.split(delimiter,limit)
定义:split()方法可以把调用它的字符串分解为一个字串数组,使用的分隔符是它的参数。
参数:
delimiter:字符串或者正则表达式,从该参数指定的地方分割字符串。
limit:指定返回数组的最大长度,如果没有设置该参数,则整个字符串都会被分割。
例如:
?
1
2
3
4
5
6
7
8
9
10
11
12 //1、只传一个参数,默认分割整个字符串
varstr="a,b,c,d,e";
str.split('','');//返回分割的字符串数组:["a","b","c","d","e"]
//2、传入两个参数
varstr="a,b,c,d,e";
str.split('','',3);//指定限定长度,则返回对应的数组:["a","b","c"]
//3、使用正则表达式匹配,不包含分割字符串
varstr="aa44bb55cc66dd";
str.split(/\d+/);//通过匹配数字进行分割字符串,但不包含分割的字符串,则返回的结果为:["aa","bb","cc","dd"];
//4、使用正则表达式匹配,包含分割字符串
varstr="aa44bb55cc66dd";
str.split(/(\d+)/);//通过匹配数字进行分割字符串,且分割的字符串是包含在子表达式中,则返回的结果为:["aa","44","bb","55","cc","66","dd"]
|
|