/*
正则表达式方法: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" "http://www.w3.org/TR/html4/strict.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>

javascript 正则表达式(二)的更多相关文章

  1. javascript正则表达式(二)——方法

    正则表达式规则见:http://www.cnblogs.com/wishyouhappy/p/3756812.html,下面说明相关方法 String相关方法 概括: search() replace ...

  2. 第五篇、javascript正则表达式二

    一.内容概要 1)创建着呢规则表达式对象的两种方法 2)正则表达式的常用属性和方法 3)string对象常用方法中可以使用正则表达式 4)ES中其他预定义的对象:Math.Date.Number.Bo ...

  3. 初学JavaScript正则表达式(二)

    正则表达式的实例化与标识符 字面量: var reg = /\bis\b/g // \b--字符边界 g全文搜索 查找单词为is的字符 He is a boy. IS He? 构造函数: var re ...

  4. javascript正则表达式(一)——语法

    前言 js中类RegExp类表示正则表达式,具有强大的模式匹配.文本检索和替换功能.正则表达式的模式规则是由一个字符序列组成,包括所有字母和数字在内,大多数的字符都是按照直接量匹配字符,某些特殊字符并 ...

  5. JavaScript正则表达式详解(二)JavaScript中正则表达式函数详解

    二.JavaScript中正则表达式函数详解(exec, test, match, replace, search, split) 1.使用正则表达式的方法去匹配查找字符串 1.1. exec方法详解 ...

  6. JavaScript正则表达式学习笔记(二) - 打怪升级

    本文接上篇,基础部分相对薄弱的同学请移步<JavaScript正则表达式学习笔记(一) - 理论基础>.上文介绍了8种JavaScript正则表达式的属性,本文还会追加介绍几种JavaSc ...

  7. JavaScript正则表达式,你真的知道?

    一.前言 粗浅的编写正则表达式,是造成性能瓶颈的主要原因.如下: var reg1 = /(A+A+)+B/; var reg2 = /AA+B/; 上述两个正则表达式,匹配效果是一样的,但是,效率就 ...

  8. 【JS】javascript 正则表达式 大全 总结

    javascript 正则表达式 大全 总结 参考整理了一些javascript正则表达式 目的一:自我复习归纳总结 目的二:共享方便大家搜索 微信:wixf150 验证数字:^[0-9]*$ 验证n ...

  9. JavaScript正则表达式详解(一)正则表达式入门

    JavaScript正则表达式是很多JavaScript开发人员比较头疼的事情,也很多人不愿意学习,只是必要的时候上网查一下就可以啦~本文中详细的把JavaScript正则表达式的用法进行了列表,希望 ...

随机推荐

  1. SQL Server select 将类型相同的行合并,并将对应金额相加

    select Category,REPLACE(sum(Amount),'-','')  as Amountfrom T_Detail WHERE CREATED_BY='6123EC14-50E2- ...

  2. UIWebView相关设置

    让UIWebView的背景透明: 1 2 self.webView.backgroundColor = [UIColor clearColor]; self.webView.opaque = NO 这 ...

  3. 使用iptables防火墙限制web的访问PV

    使用iptables防火墙限制web的访问PV #!/bin/bash while true;do awk '{print $1}' /tmp/test/access.log| grep -v &qu ...

  4. php 或js 常用的正则表达式

    1.    平时做网站经常要用正则表达式,下面是一些讲解和例子,仅供大家参考和修改使用:2.    "^\d+$" //非负整数(正整数 + 0)3.    "^[0-9 ...

  5. ionic 上拉加载更多&瀑布流加载&滚动到底部加载更多 主意事项

    首先下拉刷新的代码是这样的,标红的地方为关键代码 <html> <head> <meta charset="utf-8"> <meta n ...

  6. PHP加密解密字符串

    项目中有时我们需要使用PHP将特定的信息进行加密,也就是通过加密算法生成一个加密字符串,这个加密后的字符串可以通过解密算法进行解密,便于程序对解密后的信息进行处理. 最常见的应用在用户登录以及一些AP ...

  7. [BS-15] Values of type 'NSInteger' should not be used as format arguments

    Values of type 'NSInteger' should not be used as format arguments 苹果app支持arm64以后会有一个问题:NSInteger变成64 ...

  8. Android --资料集合

    google android 官方教程 http://hukai.me/android-training-course-in-chinese/basics/index.html android视频资料 ...

  9. JavaScript权威指南(第六版)--JavaScript概述 DEMO

    //所有在双斜线之后的内容都属于注释 //仔细阅读这里的注释:它们对JavaScript代码做了解释 //变量是表示值的一个符号名字 //变量是通过var关键字声明的 var x; //声明一个变量x ...

  10. javascript实例学习之二——类新浪微博的输入框

    该案例实现如下效果,具体可见新浪微博网站的微博发布框 实现 以下效果效果1:当光标移入文本框时,文本框上方的文字发生变化,显示剩余可以输入的字数,当光标移出文本框,并且文本框中没有任何输入时,恢复最初 ...