正则表达式方法

正则表达式方法:test(),exec()

string中的正则方法:
    match(pattern) :根据pattern进行正则匹配,如果匹配到,返回匹配结果,如匹配不到返回null
    search(pattern) :根据pattern进行正则匹配,如果匹配到一个结果,则返回它的索引数;否则返回-1
    replace(pattern,replacement) :根据pattern进行正则匹配,把匹配结果替换为replacement
    split(pattern) :根据pattern进行正则分割,返回一个分割的数组

 

注:正则表达式对象的创建最好使用

         var reg=new RegExp(/^[a-z]*$/ig);

      如果直接

         var reg=/^[a-z]*$/ig;

      会在不同的浏览器中执行出不同的结果!

-----------------------------------------------

test()方法:
用法:regexp对象实例.test(字符串)
返回值:如果满足regexp对象实例中定的正则规则,返回true,否则返回false

exec()方法:
用法:regexp对象实例.exec(字符串)
返回值:如果 exec 方法没有找到匹配,则它返回 null。如果它找到匹配,则 exec 方法返回一个数组,并且更新全局 RegExp 对象的属性,以反映匹配结果。数组的0元素包含了完整的匹配,而第1到n元素中包含的是匹配中出现的任意一个子匹配。这相当于没有设置全局标志 (g) 的 match 方法。 
如果为正则表达式设置了全局标志,exec 从以 lastIndex 的值指示的位置开始查找。如果没有设置全局标志,exec 忽略 lastIndex 的值,从字符串的起始位置开始搜索。

这里需要备注下:上面返回值这段话关于返回数组让我迷惑了好久,因为试验下来返回的都是一个长度的数组,也就是只有一个元素.查了网上很多资料都没有相关的介绍.翻开上次买的"javascript 高级程序设计"一书,在P168有介绍(所谓反向引用,以后介绍)
另外,关于"更新全局 RegExp 对象的属性"我是这样理解的:更新RegExp对象的index和lastIndex属性,在设置了全文匹配参数后可以试验,每次匹配从上一个lastIndex开始搜索.(可以结合下面的属性和后面的例子来体会)

属性,分别是 input、index 和 lastIndex。Input 属性包含了整个被查找的字符串。Index 属性中包含了整个被查找字符串中被匹配的子字符串的位置。LastIndex 属性中包含了匹配中最后一个字符的下一个位置。


match()方法:
用法:string对象.match(regexp对象)
返回值:如果 match 方法没有找到匹配,返回 null。如果找到匹配返回一个数组并且更新全局 RegExp 对象的属性以反映匹配结果。
备注:match和exec一个很明显的差别是设置了全文搜索参数g后它返回的数组不再是一个元素,而是所有的元素,第一个匹配结果数组基数为0,第二个为1,以此类推.
属性:同exec,match也有index,lastIndex,input三个属性,意义也同exec
exec和match差别比较的例子:

[xhtml]  view plain copy
  1. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">  
  2. <html>  
  3.   <head>  
  4.     <meta http-equiv="Content-Type" content="text/html; charset=GB2312" />  
  5.     <title>Untitled Document</title>  
  6.   </head>  
  7.   <body>  
  8.   <mce:script type="text/javascript"><!--  
  9.     var str="hello,caolvchong.I love maomao.I should love her forever";  
  10.     var reg=/ao/g;  
  11.     function execstr(){  
  12.       var show=reg.exec(str);  
  13.       alert(show.index+"-"+show.lastIndex+"--"+show);//exec只匹配第一个,show是单元素数组,输出第一个匹配项.index和lastIndex分别是第一项的起始和结束位置.要让exec匹配全部,要用上面exec中举的例子,使用while循环  
  14.     }  
  15.     function matchstr(){  
  16.       var show=str.match(reg);  
  17.       alert(show.index+"-"+show.lastIndex+"--"+show);//match匹配全部满足正则表达式的式子.show同样是个数组,由于包含了所有匹配项目,一般有多项.javascript中输出数组名将输出全部数组中的内容.当然你也可以用for循环逐个输出各个项,数组下标从0开始.另外,这里的index和lastIndex是最后一个匹配项的起始和结束位置  
  18.     }  
  19.         
  20.     
  21. // --></mce:script>  
  22.   被搜索字符串:Hello,my name is caolvchong.I love maomao.  
  23.   用/ao/g正则表达式搜索.<br/>  
  24.   <input type="button" value="exec方法搜索" onclick="execstr()">  
  25.   <input type="button" value="match方法搜索" onclick="matchstr()">  
  26.   </body>  
  27. </html>  

上面代码的运行:

search()方法:
用法:string对象.search(regexp对象)
返回值:search 方法指明是否存在相应的匹配。如果找到一个匹配,search 方法将返回一个整数值,指明这个匹配距离字符串开始的偏移位置。如果没有找到匹配,则返回 -1.
注意:返回的只是与正则表达式查找内容匹配的第一个子字符串的位置.所以用全局搜索参数就没有意义了.


replace()方法:
用法:string对象.replace(regexp对象|字符串,"替换的字符串")
返回值:如果设置了全文搜索,则全部满足的都将被替换;否则只替换第一个.返回替换后的字符串.
注意:replace中还可以接受字符串,但只替换第一个满足条件的字符串.


split()方法:
用法:string对象.split([分割符(可以是字符串或正则表达式[,限制输出数组个数]])
返回值:返回string对象被分割的数组
注意:string对象不会被split方法修改。分割符是可选项,可以是字符串或正则表达式对象,它标识了分隔字符串时使用的是一个还是多个字符。如果忽略该选项,返回包含整个字符串的单一元素数组.最后一个选项限制输出数组个数也是可选项,该值用来限制返回数组中的元素个数。
另外,split本身就带有全文匹配的特性,所以可用可不用g参数
从上面分析也可以看出一点:正则表达式比字符串替换功能强大.下面的例子也可以看出.

[xhtml]  view plain copy
  1. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">  
  2. <html>  
  3.   <head>  
  4.     <meta http-equiv="Content-Type" content="text/html; charset=GB2312" />  
  5.     <title>正则表达式split</title>  
  6.     <mce:script type="text/javascript"><!--  
  7.       function split_by_str(){  
  8.         var txtnode=document.getElementById("txt");//取得div节点  
  9.         var txt=txtnode.firstChild.nodeValue;//取得文本值  
  10.         var newtxt=txt.split("AI");//用AI来划分  
  11.         for(var i=0;i<newtxt.length;i++){//输出  
  12.           alert(newtxt[i]);  
  13.         }  
  14.       }  
  15.       function split_by_regexp(){  
  16.         var txtnode=document.getElementById("txt");//取得div节点  
  17.         var txt=txtnode.firstChild.nodeValue;//取得文本值  
  18.         var regtxt=/ai/i;//也可以/ai/gi,这个不影响,split本身具有全文匹配功能  
  19.         var newtxt=txt.split(regtxt);//用AI来划分  
  20.         for(var i=0;i<newtxt.length;i++){//输出  
  21.           alert(newtxt[i]);  
  22.         }  
  23.       }  
  24.       
  25. // --></mce:script>  
  26.   </head>  
  27.   <body>  
  28.     <div id="txt">  
  29.       我AI爱ai毛毛,Ai毛毛aI爱AI我!  
  30.     </div>  
  31.     <input type="button" value="用字符串AI来划分" onclick="split_by_str();">  
  32.     <input type="button" value="用正则表达式Ai或ai或AI或aI来划分" onclick="split_by_regexp();">  
  33.   </body>  
  34. </html>  
  35.   
  36.       例子:  
  37. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">  
  38. <html>  
  39.   <head>  
  40.     <meta http-equiv="Content-Type" content="text/html; charset=GB2312" />  
  41.     <title>正则表达式replace</title>  
  42.     <mce:style><!--  
  43.       .color_name{/*定义高亮样式:背景黄色,字体粗体红色*/  
  44.         color:red;  
  45.         font-weight:bold;  
  46.         background:yellow;  
  47.       }  
  48.       
  49. --></mce:style><style mce_bogus="1">      .color_name{/*定义高亮样式:背景黄色,字体粗体红色*/  
  50.         color:red;  
  51.         font-weight:bold;  
  52.         background:yellow;  
  53.       }  
  54.     </style>  
  55.     <mce:script language="JavaScript" type="text/javascript"><!--  
  56.       
  57.       function change_name(){//替换文本函数  
  58.         var txtnode=document.getElementById("txt");//取得div节点  
  59.         var txt=txtnode.firstChild.nodeValue;//取得文本值  
  60.         var regstr=/tom/gi;//正则表达式:匹配tom,全文不分大小写检索  
  61.         var newtxt=txt.replace(regstr,"草履虫");//全部替换  
  62.         document.getElementById("txt").firstChild.nodeValue=newtxt;//改变文本显示  
  63.       }  
  64.       function color_name(){//高亮函数  
  65.         var txtnode=document.getElementById("txt");//取得div节点  
  66.         var txt=txtnode.firstChild.nodeValue;//取得文本值  
  67.         var regstr=/tom/gi;//正则表达式:匹配tom,全文不分大小写检索  
  68.         var arr=txt.match(regstr);//match方法取得满足匹配的所有字符串  
  69.         for(var i=0;i<arr.length;i++){//遍历满足匹配的所有字符串  
  70.           var newtxt=txt.replace(regstr,'<span class="color_name">'+arr[i]+'</span>');//替换,实际上就是添加标签,该标签高亮  
  71.           txtnode.innerHTML=newtxt;//不能用nodeValue修改,nodeValue不支持转化为html,所以用innerHTML  
  72.           }        
  73.       }  
  74.       
  75. // --></mce:script>  
  76.   </head>  
  77.   <body>  
  78.   <div id="txt">  
  79.     Hello,everyone!  
  80.     His name is tom.  
  81.     Do you know Tom?  
  82.     TOM is a boy who loves football and PC.  
  83.     So,do you want to make friends with TOm.  
  84.   </div>  
  85.   -----------------------------------------<br/>  
  86.   把上面的Tom(包括各种形式)高亮或转化为草履虫<br/>  
  87.   -----------------------------------------<br/>  
  88.   <input type="button" value="高亮TOM" onclick="color_name();">  
  89.   <input type="button" value="转化TOM" onclick="change_name();">  
  90.   </body>  
  91. </html>  

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值