正则表达式在javascript中的应用
1.正则表达式简介正则表达式通常用于两种任务:1.验证,2.搜索/替换。用于验证时,通常需要在前后分别加上^和$,以匹配整个待验证字符串;搜索/替换时是否加上此限定则根据搜索的要求而定,此外,也有可能要在前后加上b而不是^和$,如果是全文搜索还需要在后面加上g 如var reg=/w*o(w+)?/gi,i表示不区分大小写。 尊重他人劳动成果转载请说明出处:http://www.52php.cn/article/p-ucacpiya-oy.html 2.在javascript中使用正则表达式的函数介绍Javascript中有6个函数可以使用正则表达式:match、exec、test、search、replace、split。 其中match,search,replace,split是String的方法,exec、test是RegExp类的方法 2.1 matchermatch是String的方法stringObj.match(rgExp),exec是RegExp类的方法 使用正则表达式模式对字符串执行查找,并将包含查找的结果作为数组返回。 stringObj.match(rgExp) @例子: <script language="javascript"type="text/javascript"> var objStr= "Yue I lOve you till theend of my life!"; var re=/w*o(w+)?/gi; //该表达式用来匹配一个以/w代表的字符,第二个字符是o,后面有一个字符或者多个字符+表示前面的字符匹配的次数,全局匹配,后面的g表示继续往下走即全局 i表示不区分大小写,相当于 var re = newRegExp("w*o(w+)?","gi"); 双引号要加多一次转义的w var arr=objStr.match(re); //调用match方法匹配字符串并且如果存在返回数组,如果没有结果返回为null document.write("匹配前的字符串:"+objStr+"<br>"); if(arr!=null){//如果能匹配成功即arr数组不为空,循环输出结果 for(var i=0;i<arr.length;i++){ document.write("<li>"+arr[i]); } } </script> 输出结果: 如果表达式改为var re=/w*o(w+)?/g;则只输出:you of因为对大小写敏感lOve不匹配 2.2 exec用正则表达式模式在字符串中查找,并返回该查找结果的第一个值(数组),如果匹配失败,返回null. 如果执行exec方法的正则表达式没有分组(没有括号括起来的内容),那么如果有匹配,他将返回一个只有一个元素的数组,这个数组唯一的元素就是该正则表达式匹配的第一个串;如果没有匹配则返回null。 JavaScript代码 <script> var str= "cat,hat" ; var reg=/at/; //没有g属性 alert(reg.exec(str)) alert(str.match(reg)) 都是"at"。在这种场合下exec等价于match。但是如果正则表达式是全局匹配(g属性)的,那么以上代码结果不一样了: @例子2:JavaScript代码 <script> var str= "cat,hat" ; var reg=/at/g; //注意g属性 alert(reg.exec(str)) alert(str.match(reg)) <script> 分别是 @例子3:当存在子匹配的情况 <script> var str= "cas245ssdt,hs3at" ; varreg=/s+(d+)/g; document.write(reg.exec(str)+"<br>"); document.write(str.match(reg));</script> @输出:s245,245 s245,s3 @解释:第一行输出”s245,245”,是因为exec只会匹配第一个值(数组),而且由于表达式reg里有子表达式(即存在()),所有exec返回的数组有2个值,一个是表达式完全匹配的,一个是子表达式匹配的(即(d+)),如果要方便取出可以这样写 Var result = reg.exec(str); Document.write(“result[0]=”+ result[0]+”; result[1]=”+result[0]); //@输出:result[0]=s245;result[1]=245 第2行由于表达式后面加了(g属性),全局匹配,所有输出所有的匹配值s245,s3 2.3 test返回一个 Boolean 值,它指出在被查找的字符串中是否匹配给出的正则表达式。是RegExp类的方法; var objStr=newString("3e234234!"); var re = /^ed+/; // 必须以e开头 var arr = re.test(objStr);//返回:false var re = /ed+/; var arr = re.test(objStr);//返回:true 注意:test()继承正则表达式的lastIndex属性,表达式在匹配全局标志g的时候须注意。 代码如下:
function testDemo(){ var r,re; // 声明变量。 var s = "I"; re = /I/ig; // 创建正则表达式模式。 document.write(re.test(s) + "<br/>"); // 返回 Boolean 结果。 document.write(re.test(s) + "<br/>"); document.write(re.test(s)); } testDemo();
function testDemo(){ var r,re; // 声明变量。 var s = "I"; re = /I/ig; // 创建正则表达式模式。 document.write(re.test(s) + "<br/>"); // 返回 Boolean 结果。 document.write(re.lastIndex); // 返回 Boolean 结果。 } testDemo();
2.4 search返回与正则表达式查找内容匹配的第一个子字符串的位置(偏移位)。0开始,没找到返回-1,与match一样是String 类的方法:stringObj.search(rgExp) @例子: <script> function SearchDemo(){ var r,re; // 声明变量。 var s = "The rain in Spain fallsmainly in the plain."; re = /the/i; // 创建正则表达式模式。 re2 = /tom/i; r = s.search(re); // 查找字符串。 r2 = s.search(re2); return("r:" + r +";r2:" + r2); } document.write(SearchDemo()); </script> @输出结果:r:0;r2:-1 2.5 replace返回根据正则表达式进行文字替换后的字符串的复制。是String的方法 stringObj.replace(rgExp,replaceText);注意:replaceText可以是一个方法 @例子1:替换为特定文字 <scriptlanguage="javascript"> var s=prompt("请输入在查找的字符","人"); var reg=/中华/g; var str="中华人民共2和国,中华人民共和234国"; var newstr=str.replace(reg,"中国"); document.write(newstr); </script> @输出:中国人民共2和国,中国人民共和234国 @例子2:匹配字符改颜色(数字改为红色) <scriptlanguage="javascript"> var s=prompt("请输入在查找的字符","人"); var reg=/(d)/g; var str="中华人民共2和国,中华人民共和234国"; //$1是根据正则表达式里的()内容匹配的东西 var newstr=str.replace(reg,"<fontcolor=red>$1</font>"); document.write(newstr); </script> @输出: 关于子匹配下下面的介绍:
@例子3:匹配内容修改 <scriptlanguage="javascript"> var str="他今年22岁,她今年20岁,他的爸爸今年45岁,她的爸爸今年44岁,一共有4人" function test($0) { var gyear=(new Date()).getYear()-parseInt($0)+1; return $0+"("+gyear+"年出生)"; } //var reg=new RegExp("(d+)岁","g"); reg = /(d+)岁/g; var newstr=str.replace(reg,test); document.write(newstr); </script> @输出: 看到了吧,有了正则表达式你可以对内容为所欲为。 @例子4:多匹配 <script> function f2c(s) { var test =/([d]{4})-([d]{1,2})-([d]{1,2})/; return(s.replace(test,kk)); } function kk($0,$1,$2,$3) { return($3+"/"+$2 +"/" +$1); } document.write("today:2011-03-29<br>"); document.write(f2c("today:2011-03-29")); </script> @输出: 注意:这里有$0$1$2$3,这是由于表达式有(),表示表达式有子表达式。因为有3个问号所有有3个子表达式。 $0取的是跟表示式完全匹配的字符串 $1取的是第一个子表达试相匹配的字符串即2011 $2取的是第一个子表达试相匹配的字符串即03 $3取的是第一个子表达试相匹配的字符串即29 2.6 split将一个字符串分割为子字符串,然后将结果作为字符串数组返回。 @例子: <script> function SplitDemo(){ var s,ss; var s = "The rain /.,/.in Spain fallsmainly in the plain."; // 正则表达式,用不分大不写的s进行分隔。 ss = s.split(/W+/i,5);//后面的5是可选项 表示只返回5个字符串 return(ss); } document.write("原值:The rain/.,/.in Spain falls mainly in the plain.<br>"); document.write("分解后:"+SplitDemo()); </script> @输出: (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |