admin管理员组

文章数量:1032534

javascript 正则表达式(二)

/* 正则表达式方法:test(),exec(),String对象方法:match(),search(),replace(),split() 1.test()方法: 用法: regexp对象实例.test(字符串) 返回值:如果满足regexp对象实例中定的正则规则,返回true,否则返回false 2.exec()方法: 用法: regexp对象实例.exec(字符串) 返回值:如果 exec 方法没有找到匹配,则它返回 null。如果它找到匹配,则 exec 方法返回一个数组, 并且更新全局 RegExp 对象的属性,以反映匹配结果。数组的0元素包含了完整的匹配, 而第1到n元素中包含的是匹配中出现的任意一个子匹配[反向引用]。这相当于没有设置全局标志 (g) 的 match 方法。 如果为正则表达式设置了全局标志,exec 从以 lastIndex 的值指示的位置开始查找。如果没有设置全局标志, exec 忽略 lastIndex 的值,从字符串的起始位置开始搜索。 更新RegExp对象的index和lastIndex属性, 在设置了全文匹配参数后可以试验,每次匹配从上一个lastIndex开始搜索 属性分别是 input,index和lastIndex。 Input 属性包含了整个被查找的字符串。 Index 属性中包含了整个被查找字符串中被匹配的子字符串的位置。 LastIndex 属性中包含了匹配中最后一个字符的下一个位置。 3.match()方法: 用法: string对象.match(regexp对象) 返回值:如果 match 方法没有找到匹配,返回 null。如果找到匹配返回一个数组并且更新全局 RegExp 对象的属性以反映匹配结果。 备注:match和exec一个很明显的差别是设置了全文搜索参数g后它返回的数组不再是一个元素,而是所有的元素, 第一个匹配结果数组基数为0,第二个为1,以此类推. 属性:同exec,match也有index,lastIndex,input三个属性,意义也同exec 4.search()方法: 用法: string对象.search(regexp对象) 返回值:search 方法指明是否存在相应的匹配。 如果找到一个匹配,search 方法将返回一个整数值,指明这个匹配距离字符串开始的偏移位置。如果没有找到匹配,则返回 -1. 注意:返回的只是与正则表达式查找内容匹配的第一个子字符串的位置.所以用全局搜索参数就没有意义了. 5.replace()方法: 用法: string对象.replace(regexp对象|字符串,"替换的字符串") 返回值:如果设置了全文搜索,则全部满足的都将被替换;否则只替换第一个.返回替换后的字符串. 注意:replace中还可以接受字符串,但只替换第一个满足条件的字符串. 6.split()方法: 用法: string对象.split([分割符(可以是字符串或正则表达式[,限制输出数组个数]]) 返回值:返回string对象被分割的数组 注意:string对象不会被split方法修改。分割符是可选项,可以是字符串或正则表达式对象, 它标识了分隔字符串时使用的是一个还是多个字符。如果忽略该选项,返回包含整个字符串的单一元素数组. 最后一个选项限制输出数组个数也是可选项,该值用来限制返回数组中的元素个数。 另外,split本身就带有全文匹配的特性,所以可用可不用g参数 从上面分析也可以看出一点:正则表达式比字符串替换功能强大.下面的例子也可以看出 exec和match差别比较的例子: */ <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" ".dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=GB2312" /> <title>Untitled Document</title> <style> .color_name{/*定义高亮样式:背景黄色,字体粗体红色*/ color:red; font-weight:bold; background:yellow; } </style> <script> var str="中草药,中共中央,中共中央***,中联部,jack,JACK"; var reg=/中央/g; function teststr(){ if(reg.test(str)) //正则对象的test方法,匹配返回true,否则返回false) alert("输入的字符串"+str+"包含"+reg.source); //正则对象的source属性,就是返回正则对象设置的匹配值 else alert("输入的字符串"+str+"不包含"+reg.source); } function execstr(){ var show=reg.exec(str); alert(show.index+"-"+show.lastIndex+"--"+show); //exec只匹配第一个,show是单元素数组,输出第一个匹配项.index和lastIndex分别是第一项的起始和结束位置. //要让exec匹配全部,要用上面exec中举的例子,使用while循环 } function matchstr(){ var show=str.match(reg); alert(show.index+"-"+show.lastIndex+"--"+show); //match匹配全部满足正则表达式的式子.show同样是个数组,由于包含了所有匹配项目, //一般有多项.javascript中输出数组名将输出全部数组中的内容. //当然你也可以用for循环逐个输出各个项,数组下标从0开始. //另外,这里的index和lastIndex是最后一个匹配项的起始和结束位置

} function split_by_str(){ var txtnode=document.getElementById("txt");//取得div节点 var txt=txtnode.firstChild.nodeValue;//取得文本值 var newtxt=txt.split(",");//用,来划分 for(var i=0;i<newtxt.length;i++){//输出 alert(newtxt[i]); } } function split_by_regexp(){ var txtnode=document.getElementById("txt");//取得div节点 var txt=txtnode.firstChild.nodeValue;//取得文本值 var regtxt=/,/i;//也可以/,/gi,这个不影响,split本身具有全文匹配功能 var newtxt=txt.split(regtxt);//用,来划分 for(var i=0;i<newtxt.length;i++){//输出 alert(newtxt[i]); } } function change_name(){//替换文本函数 var txtnode=document.getElementById("txt");//取得div节点 var txt=txtnode.firstChild.nodeValue;//取得文本值 var regstr=/草药/gi;//正则表达式:匹配草药,全文不分大小写检索 var newtxt=txt.replace(regstr,"顾委");//全部替换 document.getElementById("txt").firstChild.nodeValue=newtxt;//改变文本显示 } function color_name(){//高亮函数 var txtnode=document.getElementById("txt");//取得div节点 var txt=txtnode.firstChild.nodeValue;//取得文本值 var regstr=/草药/gi;//正则表达式:匹配草药,全文不分大小写检索 var arr=txt.match(regstr);//match方法取得满足匹配的所有字符串 for(var i=0;i<arr.length;i++){//遍历满足匹配的所有字符串 var newtxt=txt.replace(regstr,'<span class="color_name">'+arr[i]+'</span>'); //替换,实际上就是添加标签,该标签高亮 txtnode.innerHTML=newtxt;//不能用nodeValue修改,nodeValue不支持转化为html,所以用innerHTML } } function searchstr(){ regexpStr=/JACK/i;//i表示忽略大小写 var arr = str.search(regexpStr); if(arr==-1){ //没有找到返回-1 alert("输入的字符串中没有出现JACK"); } else{ //找到返回第一次匹配的位置 alert("第一个匹配JACK]]的字符串出现位置:"+arr); } } function findglobalstr(searchType){//匹配正则表达式函数 var regexpStr,arr; if(searchType==1){//全文搜索 regexpStr=/JACK/g;//g,全文搜索参数 while ((arr = regexpStr.exec(str)) != null){//当还没匹配完之前 alert(arr.index + "-" + arr.lastIndex + arr + "---"+arr.input); //index是找到匹配的起始位置;lastIndex是找到匹配的末位置+1.比如这个例子:要匹配cat, //而你输入的是1jack2jack3,则第一次匹配index为1,lastIndex为5.第二次匹配index为6,lastIndex为9. //从这里也可以看出,lastIndex是配置了全文搜索后下一个搜索的开始位置. //arr是输出整个数组,由于只有一个长度,输出的就是匹配的字符串 //input属性是在这里是输入的字符串,广义来说,就是被搜索的全文,比如上面举例的1jack2jack3 } } else{ //一次匹配 regexpStr=/jack/; arr = regexpStr.exec(getStr); alert(arr.index + "-" + arr.lastIndex + arr + "---"+arr.input); //由于只是一次匹配,就不要像上面那样用循环了(不然出现匹配情况,每次始终从头开始搜索,不能达到null,陷入死循环) } } </script> </head> <body> <div id="txt"> 中草药,中共中央,中共中央***,中联部 </div> test例子: <input type="button" value="Test测试" onclick="teststr();"> exec例子: <input type="button" value="exec方法搜索" onclick="execstr()"> <input type="button" value="测试全文查询" onclick="findglobalstr(1);"> match例子: <input type="button" value="match方法搜索" onclick="matchstr()"> split例子: <input type="button" value="用字符串,来划分" onclick="split_by_str();"> <input type="button" value="用正则表达式/,/划分" onclick="split_by_regexp();"> replace例子: <input type="button" value="高亮草药" onclick="color_name();"> <input type="button" value="转化草药" onclick="change_name();"> search例子 <input type="button" value="查询" onclick="searchstr();"> </body> </html>

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。 原始发表:2014-09-18,如有侵权请联系 cloudcommunity@tencent 删除字符串javascript正则表达式对象数组

javascript 正则表达式(二)

/* 正则表达式方法:test(),exec(),String对象方法:match(),search(),replace(),split() 1.test()方法: 用法: regexp对象实例.test(字符串) 返回值:如果满足regexp对象实例中定的正则规则,返回true,否则返回false 2.exec()方法: 用法: regexp对象实例.exec(字符串) 返回值:如果 exec 方法没有找到匹配,则它返回 null。如果它找到匹配,则 exec 方法返回一个数组, 并且更新全局 RegExp 对象的属性,以反映匹配结果。数组的0元素包含了完整的匹配, 而第1到n元素中包含的是匹配中出现的任意一个子匹配[反向引用]。这相当于没有设置全局标志 (g) 的 match 方法。 如果为正则表达式设置了全局标志,exec 从以 lastIndex 的值指示的位置开始查找。如果没有设置全局标志, exec 忽略 lastIndex 的值,从字符串的起始位置开始搜索。 更新RegExp对象的index和lastIndex属性, 在设置了全文匹配参数后可以试验,每次匹配从上一个lastIndex开始搜索 属性分别是 input,index和lastIndex。 Input 属性包含了整个被查找的字符串。 Index 属性中包含了整个被查找字符串中被匹配的子字符串的位置。 LastIndex 属性中包含了匹配中最后一个字符的下一个位置。 3.match()方法: 用法: string对象.match(regexp对象) 返回值:如果 match 方法没有找到匹配,返回 null。如果找到匹配返回一个数组并且更新全局 RegExp 对象的属性以反映匹配结果。 备注:match和exec一个很明显的差别是设置了全文搜索参数g后它返回的数组不再是一个元素,而是所有的元素, 第一个匹配结果数组基数为0,第二个为1,以此类推. 属性:同exec,match也有index,lastIndex,input三个属性,意义也同exec 4.search()方法: 用法: string对象.search(regexp对象) 返回值:search 方法指明是否存在相应的匹配。 如果找到一个匹配,search 方法将返回一个整数值,指明这个匹配距离字符串开始的偏移位置。如果没有找到匹配,则返回 -1. 注意:返回的只是与正则表达式查找内容匹配的第一个子字符串的位置.所以用全局搜索参数就没有意义了. 5.replace()方法: 用法: string对象.replace(regexp对象|字符串,"替换的字符串") 返回值:如果设置了全文搜索,则全部满足的都将被替换;否则只替换第一个.返回替换后的字符串. 注意:replace中还可以接受字符串,但只替换第一个满足条件的字符串. 6.split()方法: 用法: string对象.split([分割符(可以是字符串或正则表达式[,限制输出数组个数]]) 返回值:返回string对象被分割的数组 注意:string对象不会被split方法修改。分割符是可选项,可以是字符串或正则表达式对象, 它标识了分隔字符串时使用的是一个还是多个字符。如果忽略该选项,返回包含整个字符串的单一元素数组. 最后一个选项限制输出数组个数也是可选项,该值用来限制返回数组中的元素个数。 另外,split本身就带有全文匹配的特性,所以可用可不用g参数 从上面分析也可以看出一点:正则表达式比字符串替换功能强大.下面的例子也可以看出 exec和match差别比较的例子: */ <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" ".dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=GB2312" /> <title>Untitled Document</title> <style> .color_name{/*定义高亮样式:背景黄色,字体粗体红色*/ color:red; font-weight:bold; background:yellow; } </style> <script> var str="中草药,中共中央,中共中央***,中联部,jack,JACK"; var reg=/中央/g; function teststr(){ if(reg.test(str)) //正则对象的test方法,匹配返回true,否则返回false) alert("输入的字符串"+str+"包含"+reg.source); //正则对象的source属性,就是返回正则对象设置的匹配值 else alert("输入的字符串"+str+"不包含"+reg.source); } function execstr(){ var show=reg.exec(str); alert(show.index+"-"+show.lastIndex+"--"+show); //exec只匹配第一个,show是单元素数组,输出第一个匹配项.index和lastIndex分别是第一项的起始和结束位置. //要让exec匹配全部,要用上面exec中举的例子,使用while循环 } function matchstr(){ var show=str.match(reg); alert(show.index+"-"+show.lastIndex+"--"+show); //match匹配全部满足正则表达式的式子.show同样是个数组,由于包含了所有匹配项目, //一般有多项.javascript中输出数组名将输出全部数组中的内容. //当然你也可以用for循环逐个输出各个项,数组下标从0开始. //另外,这里的index和lastIndex是最后一个匹配项的起始和结束位置

} function split_by_str(){ var txtnode=document.getElementById("txt");//取得div节点 var txt=txtnode.firstChild.nodeValue;//取得文本值 var newtxt=txt.split(",");//用,来划分 for(var i=0;i<newtxt.length;i++){//输出 alert(newtxt[i]); } } function split_by_regexp(){ var txtnode=document.getElementById("txt");//取得div节点 var txt=txtnode.firstChild.nodeValue;//取得文本值 var regtxt=/,/i;//也可以/,/gi,这个不影响,split本身具有全文匹配功能 var newtxt=txt.split(regtxt);//用,来划分 for(var i=0;i<newtxt.length;i++){//输出 alert(newtxt[i]); } } function change_name(){//替换文本函数 var txtnode=document.getElementById("txt");//取得div节点 var txt=txtnode.firstChild.nodeValue;//取得文本值 var regstr=/草药/gi;//正则表达式:匹配草药,全文不分大小写检索 var newtxt=txt.replace(regstr,"顾委");//全部替换 document.getElementById("txt").firstChild.nodeValue=newtxt;//改变文本显示 } function color_name(){//高亮函数 var txtnode=document.getElementById("txt");//取得div节点 var txt=txtnode.firstChild.nodeValue;//取得文本值 var regstr=/草药/gi;//正则表达式:匹配草药,全文不分大小写检索 var arr=txt.match(regstr);//match方法取得满足匹配的所有字符串 for(var i=0;i<arr.length;i++){//遍历满足匹配的所有字符串 var newtxt=txt.replace(regstr,'<span class="color_name">'+arr[i]+'</span>'); //替换,实际上就是添加标签,该标签高亮 txtnode.innerHTML=newtxt;//不能用nodeValue修改,nodeValue不支持转化为html,所以用innerHTML } } function searchstr(){ regexpStr=/JACK/i;//i表示忽略大小写 var arr = str.search(regexpStr); if(arr==-1){ //没有找到返回-1 alert("输入的字符串中没有出现JACK"); } else{ //找到返回第一次匹配的位置 alert("第一个匹配JACK]]的字符串出现位置:"+arr); } } function findglobalstr(searchType){//匹配正则表达式函数 var regexpStr,arr; if(searchType==1){//全文搜索 regexpStr=/JACK/g;//g,全文搜索参数 while ((arr = regexpStr.exec(str)) != null){//当还没匹配完之前 alert(arr.index + "-" + arr.lastIndex + arr + "---"+arr.input); //index是找到匹配的起始位置;lastIndex是找到匹配的末位置+1.比如这个例子:要匹配cat, //而你输入的是1jack2jack3,则第一次匹配index为1,lastIndex为5.第二次匹配index为6,lastIndex为9. //从这里也可以看出,lastIndex是配置了全文搜索后下一个搜索的开始位置. //arr是输出整个数组,由于只有一个长度,输出的就是匹配的字符串 //input属性是在这里是输入的字符串,广义来说,就是被搜索的全文,比如上面举例的1jack2jack3 } } else{ //一次匹配 regexpStr=/jack/; arr = regexpStr.exec(getStr); alert(arr.index + "-" + arr.lastIndex + arr + "---"+arr.input); //由于只是一次匹配,就不要像上面那样用循环了(不然出现匹配情况,每次始终从头开始搜索,不能达到null,陷入死循环) } } </script> </head> <body> <div id="txt"> 中草药,中共中央,中共中央***,中联部 </div> test例子: <input type="button" value="Test测试" onclick="teststr();"> exec例子: <input type="button" value="exec方法搜索" onclick="execstr()"> <input type="button" value="测试全文查询" onclick="findglobalstr(1);"> match例子: <input type="button" value="match方法搜索" onclick="matchstr()"> split例子: <input type="button" value="用字符串,来划分" onclick="split_by_str();"> <input type="button" value="用正则表达式/,/划分" onclick="split_by_regexp();"> replace例子: <input type="button" value="高亮草药" onclick="color_name();"> <input type="button" value="转化草药" onclick="change_name();"> search例子 <input type="button" value="查询" onclick="searchstr();"> </body> </html>

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。 原始发表:2014-09-18,如有侵权请联系 cloudcommunity@tencent 删除字符串javascript正则表达式对象数组

本文标签: javascript 正则表达式(二)