`
ipjmc
  • 浏览: 701870 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

JavaScript正则表达式的常用方法总结

阅读更多

        在介绍正则表达式语法之前先学习下面几个方法:
        正则表达式方法:test(), exec()
        String对象方法:match(), search(), replace(), split()

        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差别比较的例子:

 
<!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>

  </head>
  <body>
  <script>
    var str="hello,caolvchong.I love maomao.I should love her forever";
    var reg=/ao/g;
    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是最后一个匹配项的起始和结束位置 
    }
      
  </script>
        被搜索字符串:Hello,my name is caolvchong.I love maomao.
        用/ao/g正则表达式搜索.<br/>
  <input type="button" value="exec方法搜索" onclick="execstr()">
  <input type="button" value="match方法搜索" onclick="matchstr()">
  </body>
</html>


        上面代码的运行:

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

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

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


<!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>正则表达式split</title>
    <script>
      function split_by_str(){
        var txtnode=document.getElementById("txt");//取得div节点
        var txt=txtnode.firstChild.nodeValue;//取得文本值
        var newtxt=txt.split("AI");//用AI来划分 
        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=/ai/i;//也可以/ai/gi,这个不影响,split本身具有全文匹配功能
        var newtxt=txt.split(regtxt);//用AI来划分 网页教学网 
        for(var i=0;i<newtxt.length;i++){//输出
          alert(newtxt[i]);
        }
      }
    </script>
  </head>
  <body>
    <div id="txt">
      我AI爱ai毛毛,Ai毛毛aI爱AI我!
    </div>
    <input type="button" value="用字符串AI来划分" onclick="split_by_str();">
    <input type="button" value="用正则表达式Ai或ai或AI或aI来划分" onclick="split_by_regexp();">
  </body>
</html>


<!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>正则表达式replace</title>
    <style>
      .color_name{/*定义高亮样式:背景黄色,字体粗体红色*/
        color:red;
        font-weight:bold;
        background:yellow;
      }
    </style>
    <script language="JavaScript" type="text/javascript">    
      function change_name(){//替换文本函数 
        var txtnode=document.getElementById("txt");//取得div节点
        var txt=txtnode.firstChild.nodeValue;//取得文本值
        var regstr=/tom/gi;//正则表达式:匹配tom,全文不分大小写检索
        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=/tom/gi;//正则表达式:匹配tom,全文不分大小写检索
        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
          }      
      }
    </script>
  </head>
  <body>
  <div id="txt">
    Hello,everyone!
    His name is tom.
    Do you know Tom?
    TOM is a boy who loves football and PC.
    So,do you want to make friends with TOm.
  </div>
  -----------------------------------------<br/>
  把上面的Tom(包括各种形式)高亮或转化为草履虫<br/>
  -----------------------------------------<br/> 
  <input type="button" value="高亮TOM" onclick="color_name();">
  <input type="button" value="转化TOM" onclick="change_name();">
  </body>
</html>


<!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>正则表达式</title>
    <script language="JavaScript" type="text/javascript">
    function regexp_str(){
      var getStr=document.getElementsByTagName("input")[0].value; 
      var regexpStr;
      var searchType=document.getElementsByTagName("input")[1].value;
      if(searchType==1){ //是否大小写判断
        regexpStr=/cat/i;
      }
      else{  
        regexpStr=/cat/;
        }
      var arr = getStr.search(regexpStr);
      if(arr==-1){ //没有找到返回-1
        alert("输入的字符串中没有出现cat");
      }
      else{ //找到返回第一次匹配的位置 
        alert("第一个匹配cat的字符串出现位置:"+arr);
      }
    }
    function checkbox_value(){
      var searchType=document.getElementsByTagName("input")[1].value;
      if(searchType==1)
        searchType=0;
      else
        searchType=1;
      document.getElementsByTagName("input")[1].value=searchType;
    }
  </script>
  </head>
  <body>
    <input type="text">
    忽略大小写:<input type="checkbox" checked value="1" onchange="checkbox_value();"> 
    <input type="button" value="查询" onclick="regexp_str();">
  </body>
</html>


<!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>正则表达式</title>
    <script language="JavaScript" type="text/javascript">
    function regexp_str(){//匹配正则表达式函数
      var getStr=document.getElementsByTagName("input")[0].value;//取得输入 
      var regexpStr,arr;
      var searchType=document.getElementsByTagName("input")[1].value;//是否全文搜索
      if(searchType==1){//全文搜索
        regexpStr=/cat/g;//g,全文搜索参数
        while ((arr = regexpStr.exec(getStr)) != null){//当还没匹配完之前
        alert(arr.index + "-" + arr.lastIndex + arr + "---"+arr.input);
//index是找到匹配的起始位置;lastIndex是找到匹配的末位置+1.比如这个例子:要匹配cat,而你输入的是1cat2cat3,则第一次匹配index为1,lastIndex为4.第二次匹配index为5,lastIndex为8.从这里也可以看出,lastIndex是配置了全文搜索后下一个搜索的开始位置. 
//arr是输出整个数组,由于只有一个长度,输出的就是匹配的字符串
//input属性是在这里是输入的字符串,广义来说,就是被搜索的全文,比如上面举例的1cat2cat3
        }
      }
      else{ //一次匹配
        regexpStr=/cat/;
        arr = regexpStr.exec(getStr);
        alert(arr.index + "-" + arr.lastIndex + arr + "---"+arr.input); //由于只是一次匹配,就不要像上面那样用循环了(不然出现匹配情况,每次始终从头开始搜索,不能达到null,陷入死循环)
        }    
    }
    function checkbox_value(){//改变checkbox的值 
      var searchType=document.getElementsByTagName("input")[1].value; //取得当前checkbox值
      if(searchType==1) //checkbox值为1改为0,否则改为1
        searchType=0;
      else
        searchType=1;
      document.getElementsByTagName("input")[1].value=searchType;
    }
  </script>
  </head>
  <body>
    <input type="text">
    全文搜索:<input type="checkbox" checked value="1" onchange="checkbox_value();">
    <input type="button" value="查询" onclick="regexp_str();"> 
  </body>
</html>


<!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>正则表达式</title>
    <script language="JavaScript" type="text/javascript">
    function regexp_str(){
      var getStr=document.getElementsByTagName("input")[0].value; //取得输入值
      var regexpStr=/cat/; //建立正则对象,匹配为cat
      if(regexpStr.test(getStr)) //正则对象的test方法,后面会介绍(就是匹配返回true,否则返回false) 
        alert("输入的字符串"+getStr+"包含"+regexpStr.source); //正则对象的source属性,后面会介绍(就是返回正则对象设置的匹配值)
      else
        alert("输入的字符串"+getStr+"不包含"+regexpStr.source);
    }
  </script>

  </head>
  <body>
    <input type="text">
    <input type="button" value="查询" onclick="regexp_str();">
  </body>
</html>


相关链接:
正则表达式语法
常用JS验证函数总结
分享到:
评论

相关推荐

    三菱PLC例程源码QD75P八轴定位系统程序

    三菱PLC例程源码QD75P八轴定位系统程序本资源系百度网盘分享地址

    WeRoBot-0.3.2-py2.7.egg

    Python库是一组预先编写的代码模块,旨在帮助开发者实现特定的编程任务,无需从零开始编写代码。这些库可以包括各种功能,如数学运算、文件操作、数据分析和网络编程等。Python社区提供了大量的第三方库,如NumPy、Pandas和Requests,极大地丰富了Python的应用领域,从数据科学到Web开发。Python库的丰富性是Python成为最受欢迎的编程语言之一的关键原因之一。这些库不仅为初学者提供了快速入门的途径,而且为经验丰富的开发者提供了强大的工具,以高效率、高质量地完成复杂任务。例如,Matplotlib和Seaborn库在数据可视化领域内非常受欢迎,它们提供了广泛的工具和技术,可以创建高度定制化的图表和图形,帮助数据科学家和分析师在数据探索和结果展示中更有效地传达信息。

    tensorflow_serving_api_gpu-1.14.0-py2.py3-none-any.whl

    Python库是一组预先编写的代码模块,旨在帮助开发者实现特定的编程任务,无需从零开始编写代码。这些库可以包括各种功能,如数学运算、文件操作、数据分析和网络编程等。Python社区提供了大量的第三方库,如NumPy、Pandas和Requests,极大地丰富了Python的应用领域,从数据科学到Web开发。Python库的丰富性是Python成为最受欢迎的编程语言之一的关键原因之一。这些库不仅为初学者提供了快速入门的途径,而且为经验丰富的开发者提供了强大的工具,以高效率、高质量地完成复杂任务。例如,Matplotlib和Seaborn库在数据可视化领域内非常受欢迎,它们提供了广泛的工具和技术,可以创建高度定制化的图表和图形,帮助数据科学家和分析师在数据探索和结果展示中更有效地传达信息。

    三菱PLC例程源码ro1-chunshui

    三菱PLC例程源码ro1_chun shui本资源系百度网盘分享地址

    产品经理与产品原型(详解)

    互联网产品经理在向技术部门递交产品策划方案时,除了详尽的需求阐述,一份清晰易懂的产品原型设计方案同样不可或缺。一份出色的原型设计,不仅能促进前期的深入讨论,更能让美工和开发人员更直观地理解产品特性,进而优化工作流程,减少不必要的时间消耗,提升整体工作效率。接下来,我想就产品经理与原型设计之间的关系进行简要的探讨,并期待能与大家进行深入的交流和探讨。 产品原型,简而言之,是产品设计最终成形之前的一个基础框架。对于网站而言,它意味着对页面模块和元素进行初步、大致的排版与布局。进一步讲,我们还会加入一些交互性元素,使原型更加具体、生动,更贴近最终产品的形态,从而帮助团队成员更好地理解和构建产品。 很多人存在一个误区,认为UI、UE设计师的职责就是将产品原型转化为具体的页面效果。然而,实际上他们的工作流程是在原型设计完成之后展开的。在整个产品开发流程中,产品经理是最了解产品特性、用户和市场需求的角色。尽管设计师在视觉设计方面可能表现得非常出色,但他们在理解产品、用户、市场及业务方面的深度与准确性上,往往无法与产品经理相提并论。准确地说,设计师的工作是将产品原型转化为产品经理所期望的视觉效果。

    小红书娱乐营销520明星大事件《全明星告白季》招商方案ss.pptx

    小红书娱乐营销520明星大事件《全明星告白季》招商方案ss.pptx

    本科毕业设计-基于深度学习的模糊人脸图像增强系统的设计与实现.zip

    人工智能毕业设计&课程设计

    三菱PLC例程源码车辆进出车库

    三菱PLC例程源码车辆进出车库本资源系百度网盘分享地址

    三菱PLC例程源码PLCFX0N三层三站程序

    三菱PLC例程源码PLCFX0N三层三站程序本资源系百度网盘分享地址

    三菱PLC例程源码纯水控制三菱PLC实例和触摸屏程序

    三菱PLC例程源码纯水控制三菱PLC实例和触摸屏程序本资源系百度网盘分享地址

    三菱PLC例程源码pp復卷機三菱伺服編程

    三菱PLC例程源码pp復卷機三菱伺服編程本资源系百度网盘分享地址

    三菱PLC例程源码变频器16段速控制

    三菱PLC例程源码变频器16段速控制本资源系百度网盘分享地址

    wheel-0.34.2.tar.gz

    Python库是一组预先编写的代码模块,旨在帮助开发者实现特定的编程任务,无需从零开始编写代码。这些库可以包括各种功能,如数学运算、文件操作、数据分析和网络编程等。Python社区提供了大量的第三方库,如NumPy、Pandas和Requests,极大地丰富了Python的应用领域,从数据科学到Web开发。Python库的丰富性是Python成为最受欢迎的编程语言之一的关键原因之一。这些库不仅为初学者提供了快速入门的途径,而且为经验丰富的开发者提供了强大的工具,以高效率、高质量地完成复杂任务。例如,Matplotlib和Seaborn库在数据可视化领域内非常受欢迎,它们提供了广泛的工具和技术,可以创建高度定制化的图表和图形,帮助数据科学家和分析师在数据探索和结果展示中更有效地传达信息。

    基于SSM框架的二手物品交易管理系统设计源码

    这是一个基于SSM框架的二手物品交易管理系统设计,使用Java语言开发,包含344个文件。主要文件类型包括59个JPG图片文件、59个Java源文件、48个PNG图片文件、37个JAR包文件、34个JavaScript文件、28个JSP文件、26个CSS文件、16个XML文件和5个GIF图片文件。该项目提供了一个全面的二手物品交易平台,支持用户发布商品、查看闲置、充值账户、查看所有订单和发布求购信息,旨在为用户提供便捷、安全的交易环境。

    tensorflow_privacy-0.2.1-py3-none-any.whl

    Python库是一组预先编写的代码模块,旨在帮助开发者实现特定的编程任务,无需从零开始编写代码。这些库可以包括各种功能,如数学运算、文件操作、数据分析和网络编程等。Python社区提供了大量的第三方库,如NumPy、Pandas和Requests,极大地丰富了Python的应用领域,从数据科学到Web开发。Python库的丰富性是Python成为最受欢迎的编程语言之一的关键原因之一。这些库不仅为初学者提供了快速入门的途径,而且为经验丰富的开发者提供了强大的工具,以高效率、高质量地完成复杂任务。例如,Matplotlib和Seaborn库在数据可视化领域内非常受欢迎,它们提供了广泛的工具和技术,可以创建高度定制化的图表和图形,帮助数据科学家和分析师在数据探索和结果展示中更有效地传达信息。

    使用DS Client在PPT中动态展示分子三维结构.pdf

    使用DS Client在PPT中动态展示分子三维结构

    quartus ii安装教程.docx

    quartus ii安装教程

    基于ssm高校食堂订餐系统.zip

    基于ssm高校食堂订餐系统.zip

    Google-JavaScript-编码规范指南

    Google JavaScript编码规范指南是Google公司推出的一套详尽且实用的JavaScript编程规范,旨在为开发者提供一个清晰、一致的编码标准,以提高代码质量、可读性和可维护性。这套规范不仅涵盖了JavaScript语言的基础语法和常见模式,还针对Google的实际项目需求,提供了一系列最佳实践和建议。 通过遵循Google JavaScript编码规范指南,开发者可以确保自己的代码风格与团队其他成员保持一致,减少因编码习惯不同而引发的沟通成本和潜在错误。规范中详细说明了变量命名、函数定义、注释书写、代码格式化等方面的要求,使得代码更加整洁、易于阅读和理解。 此外,Google JavaScript编码规范指南还强调了代码性能和可维护性的重要性。它提倡使用高效的数据结构和算法,避免不必要的性能开销;同时,也鼓励开发者编写可重用的代码,减少重复劳动,提高开发效率。 对于初学者来说,Google JavaScript编码规范指南也是一本极佳的入门教材。它可以帮助初学者养成良好的编程习惯,掌握JavaScript的核心概念和技巧,为未来的项目开发打下坚实的基础。

    tensorflow_ranking-0.5.3-py2.py3-none-any.whl

    算、文件操作、数据分析和网络编程等。Python社区提供了大量的第三方库,如NumPy、Pandas和Requests,极大地丰富了Python的应用领域,从数据科学到Web开发。Python库的丰富性是Python成为最受欢迎的编程语言之一的关键原因之一。这些库不仅为初学者提供了快速入门的途径,而且为经验丰富的开发者提供了强大的工具,以高效率、高质量地完成复杂任务。例如,Matplotlib和Seaborn库在数据可视化领域内非常受欢迎,它们提供了广泛的工具和技术,可以创建高度定制化的图表和图形,帮助数据科学家和分析师在数据探索和结果展示中更有效地传达信息。

Global site tag (gtag.js) - Google Analytics