`

二 javascript 正则表达式是分组知识

    博客分类:
  • js
 
阅读更多

1) 简单分组 

 

<script language="JavaScript">
  <!--
    /*正则表达式  简单的分组
    举例 我们要查找字符串 MouseMouse

    var reCat = /MouseMouse/gi; 
    
    尽管这是可以的,但是有点浪费。如果不知道Mouse 在字符串中到底出现几次时该怎么办,如果重复多次呢。
    var reCat = /(mouse){2}/gi;    括号的意思列Mouse 将在一行连续出现2次。

    */  
    
    var data = "Ah-mousemouse";  
    var reCat = /(mouse){2}/gi;   
    var arrdata = data.match(reCat);

    for (var i = 0; i < arrdata.length; i++)
    {
        alert(arrdata[i]);
    }    
    

  //-->
  </script>

 

 

2 复杂分组  

 

 

<script language="JavaScript">
  <!--
    /*正则表达式  复杂的分组
         ?   零次 或 一次
    *   零次 或 多次
    +   最少一次 或 多次
    */  
    
    var data = "bb ba da bad dad aa ";  
    var reCat = /([bd]ad?)/gi;   // 匹配出 ba da bad  dad
    var arrdata = data.match(reCat);

    for (var i = 0; i < arrdata.length; i++)
    {
        alert(arrdata[i]);
    }    
    

    // 同时 也不介意将分组放在分组中间
    // var re = /(mom( and dad)?)/;    匹配出 mom  或  mon and daa
  //-->
  </script>

 

 

3   反向引用 

 

<script language="JavaScript">
  <!--
    /*正则表达式  反向引用*/

    var sToMatch = "#123456789";
    var reNumbers = /#(\d+)/;
    reNumbers.test(sToMatch);
    alert(RegExp.$1);

    /* 
      这个例子尝试匹配后面跟着几个或多个数字的镑符合,并对数字进行分组
      以存储他们。在调用 test 方法后,所有的反向引用都保存到了 RegExp 构造函数中
      从 RegExp.$1(它保存了第一个反向引用)开始,如果还有第二个反向引用,就是
      RegExp.$2,如果还有第三个反向引用存在,就是 RegExp.$3.依此类推。因为该组
      匹配了 “123456780”,所以 RegExp.$1 中就存储了这个字符串。

    */


    var sToChange = "1234 5678";
    var reMatch = /(\d{4}) (\d{4})/;
    var sNew = sToChange.replace(reMatch,"$2 $1");
    alert(sNew);

    /*
      在这个例子中,正则表达式有两个分组,每一个分组有四个数字。在 replace() 方法的第二个参数
      中,$2 等同于 “5678” ,而 $1 等同于 “1234”,对应于它们在表达式中的出现顺序。
    */

  //-->
  </script>

 

 4 候选 

 

 

 <script language="JavaScript">
  <!--
    /*正则表达式  候选 */
    var sToMatch1 = "red";
    var sToMatch2 = "black";
    var reRed = /red/;
    var reBlack = /black/;

    alert(reRed.test(sToMatch1) || reBlack.test(sToMatch1));
    alert(reRed.test(sToMatch2) || reBlack.test(sToMatch2));

    /*
     这虽然能完成任务,但是十分沉长,还有另一种方式就是正则表达式的候选操作符。
    */

    var sToMatch1 = "red";
    var sToMatch2 = "black";
    var reRedOrBlack = /(red|black)/;
    alert(reRedOrBlack.test(sToMatch1));
    alert(reRedOrBlack.test(sToMatch2));

  //-->
  </script>

 

 5  非捕获性分组

 

<script language="JavaScript">
  <!--
    /*正则表达式  非捕获性分组
    
    如果要创建一个非捕获性分组,只要在左括号的后面加上一个问号和一个紧跟的冒号:
    */

    var sToMatch = "#123456789";
    var reNumbers = /#(?:\d+)/;
    reNumbers.test(sToMatch);
    alert(RegExp.$1);

    /*
    这个例子的最后一行代码输出一个空字符串,因为该组是非捕获性的,
    */

    var sToMatch = "#123456789";
    var reNumbers = /#(?:\d+)/;
    alert(sToMatch.replace(reNumbers,"abcd$1"));

    /*
    正因如此,replace()方法就不能通过 RegExp.$x 变量来使用任何反向引用,这段代码
    输出的“abcd$1”而不是abcd123456789, 因为$1 在这里并不被看成是一个反向引用。
    */
  //-->
  </script>
 

 

6 前瞻 

 

<script language="JavaScript">
  <!--
    /*正则表达式  前瞻
    前瞻 就和它名字一样,它告诉正则表达式运算器向前看一些字符而不是移动位置
    */


      var sToMatch1 = "bedroom";
      var sToMatch2 = "bedding";
      var reBed = /bed(?=room)/; 
      alert(reBed.test(sToMatch1));  //true
      alert(reBed.test(sToMatch2));  //false
   
    //负向前瞻
    
      var sToMatch1 = "bedroom";
      var sToMatch2 = "bedding";
      var reBed = /bed(?!room)/; 
      alert(reBed.test(sToMatch1)); //false
      alert(reBed.test(sToMatch2)); //true
  //-->
  </script>

 7 边界 

 

<script language="JavaScript">
  <!--
    /*正则表达式  边界
    ^     行开头
    $     行结尾
    \b    单词的边界
    \B    非单词的边界
    */

      var sToMatch = "Important word is the last one.";
      var reLastWord = /(\w+)\.$/; 
      reLastWord.test(sToMatch);
      alert(RegExp.$1);  //one

    /*
    假如想查找一个单词,但要它只出现在行尾,则可以使用美元符号 ($)来表示它:
    */



      var sToMatch = "Important word is the last one.";
      var reLastWord = /^(\w+)/; 
      reLastWord.test(sToMatch);
      alert(RegExp.$1);  //Important

    /*
    在这个例子中,正则表达式查找行起始位置后的一个或多个单词字符。如果遇到非单词字符
    匹配停止,返回 Important。 这个例子也可以用单词边界实现。
    */
   
      var sToMatch = "Important word is the last one.";
      var reLastWord = /^(.+?)\b/; 
      reLastWord.test(sToMatch);
      alert(RegExp.$1);  //Important
    
    /*
    这里,正则表达式用惰性量词来制定在单词边界之前可以出现任何字符,且可以出现一次或
    多次(如果使用贪婪性量词,表达式就匹配整个字符串)。
    */

    var data = " First second thind fourth fifth sixth ";  
    var reCat = /\b(\S+?)\b/g;   
    var arrdata = data.match(reCat);

    for (var i = 0; i < arrdata.length; i++)
    {
        alert(arrdata[i]);
    }   

    /*
    使用单词边界可以方便地从字符串中抽取单词。
    */
  //-->
  </script>

 

 8 多行模式 

 

  <script language="JavaScript">
  <!--
    /*正则表达式  多行模式
   
      要制定多行模式,只要在正则表达式想要匹配的行末的一个单词
    */  
    
    var data = " First second\n thind fourth\n fifth sixth";  
    var reCat = /(\w+)$/g;   
    var arrdata = data.match(reCat);

    for (var i = 0; i < arrdata.length; i++)
    {
        alert(arrdata[i]);
    }  
    
    /*
      上面只返回一个单词 sixth,因为换行符阻挡了匹配,只能匹配行末的一个单词,
    当然也可以使用 split() 方法将字符串分割成数组,但就得对每一行进行单独匹配。

    以前不好好看书经常半吊子,看一半就仍了,导致用了好多 split, 其实很简单如下面
    例子 只需要 m 参数进行多行匹配。

    */  
    var data = " First second\n thind fourth\n fifth sixth";  
    var reCat = /(\w+)$/gm;   
    var arrdata = data.match(reCat);

    for (var i = 0; i < arrdata.length; i++)
    {
        alert(arrdata[i]);
    }  
    

  //-->
  </script>
 

 

 

分享到:
评论

相关推荐

    Javascript 正则表达式完全手册

    一下弄懂JS支持的所有正则知识:定义方法,模式匹配,选择和分组,使用方法

    深入理解正则表达式语法知识

    4.选择与分组 (1).分组 字符组[]:表示匹配若干个字符之一 字符组可以浅显的理解为一些字符的组合,字符组与普通字符的区别在于:abc普通字符表示匹配a接下来b接下来c而字符组[abc]表示在同一位置匹配a或者b或者c...

    javascript完全学习手册2 源码

    3.1.2 使用JavaScript对象基础知识 3.2 Array对象 3.2.1 创建Array对象 3.2.2 Array对象属性 3.2.3 Array对象方法 3.3 String对象 3.3.1 创建String对象 3.3.2 String对象属性 3.3.3 String对象方法...

    javascript完全学习手册1 源码

    7.4 String对象中与正则表达式 有关的方法 177 第8章 高级DOM技术 182 8.1 CSS样式 182 8.1.1 CSS语法 182 8.1.2 CSS属性 187 8.2 样式控制 192 8.2.1 Style对象 193 8.2.2 使用CSS属性 194 8.2.3 自定义鼠标提示 ...

    JavaScript实战

    4.3.3 分组正则表达式的部分 88 4.3.4 有用的正则表达式 89 4.3.5 匹配模式 94 4.3.6 替换文本 96 4.3.7 尝试正则表达式 97 4.4 数值 97 4.4.1 把字符串改变为数值 97 4.4.2 测试数值 99 4.4.3 舍入数值 100 4.4.4 ...

    JavaScript版 数据结构与算法

    基础算法之“正则类”正则是让人又爱又恨的JS知识,“爱”它的神通广大,“恨”它的抽象难懂,我们尝试从基础用法到高级模式匹配让你走近它的梦幻世界 4-1 重复的子串-原理讲解 4-2 重复的子串-代码演示 4-3 正则...

    Tcl_TK编程权威指南pdf

    其他使用正则表达式的命令 第12章 脚本库及软件包 确定软件包的位置:auto-path变量 使用软件包 对软件包加载的总结 package命令 基于文件tclindex的库 unknown命令 方便交互 tclshell的库环境 编码风格 ...

    最新Python3.5零基础+高级+完整项目(28周全)培训视频学习资料

    正则表达式Re模块使用详解 第6周 本节小鸡汤(电影分享) 面向对象介绍 面向对象特性介绍 实例演示opp编程好处 实例变量与类变量 类变量的作用及析构函数 类的继承 经典类与新式类的继承顺序 继承实例讲解 多态...

    史上最好传智播客就业班.net培训教程60G 不下会后悔

    常用数据结构(List、Dictionary、Array)、多态、常用设计模式、反射、常用.net类库、泛型、IO流、委托事件、正则表达式、XML、反射、GC等。 2、数据库开发及ADO.Net(6天) 核心技术课程 数据库开发基础、...

    PHP和MySQL WEB开发(第4版)

    4.9 比较字符串函数和正则表达式函数 4.10 进一步学习 4.11 下一章 第5章 代码重用与函数编写 5.1 代码重用的好处 5.1.1 成本 5.1.2 可靠性 5.1.3 一致性 5.2 使用require()和include()函数 5.2.1 文件扩展名和...

    PHP和MySQL Web开发第4版pdf以及源码

    4.9 比较字符串函数和正则表达式函数 4.10 进一步学习 4.11 下一章 第5章 代码重用与函数编写 5.1 代码重用的好处 5.1.1 成本 5.1.2 可靠性 5.1.3 一致性 5.2 使用require()和include()函数 5.2.1 文件...

    PHP和MySQL Web开发第4版

    4.9 比较字符串函数和正则表达式函数 4.10 进一步学习 4.11 下一章 第5章 代码重用与函数编写 5.1 代码重用的好处 5.1.1 成本 5.1.2 可靠性 5.1.3 一致性 5.2 使用require()和include()函数 5.2.1 文件...

    Java语言基础下载

    第二十七章:JavaScript进阶 521 学习目标 521 基于对象的JavaScript语言 522 对象的基础知识 522 this关键词 523 new运算符 523 常用对象的属性和方法 525 算术函数的math对象 527 创建新对象 529 JavaScript中的...

    ASP.NET Night Words

    9.7 正则表达式 157 9.8 regularexpressionvalidator控件 159 9.9 customvalidator控件 161 9.10 validationsummary控件 165 9.11 分组验证技术 167 9.12 总结 170 第10章 复合控件和母板页 172 10.1 ...

    JavaScript高级教程

    第 1 章 JavaScript 是什么...............................................1 3 1.1 历史简述..............................................1 1.2 JavaScript 实现................................................

    PHP开发实战1200例(第1卷).(清华出版.潘凯华.刘中华).part1

    实例110 通过正则表达式对字符串进行匹配查找 141 实例111 通过IP地址查找主机所在地 142 实例112 解决用substr()函数对中文字符串截取时出现乱码的问题 143 实例113 字符串与HTML标记相互转换 144 实例114 运用...

    PHP开发实战1200例(第1卷).(清华出版.潘凯华.刘中华).part2

    实例110 通过正则表达式对字符串进行匹配查找 141 实例111 通过IP地址查找主机所在地 142 实例112 解决用substr()函数对中文字符串截取时出现乱码的问题 143 实例113 字符串与HTML标记相互转换 144 实例114 运用...

Global site tag (gtag.js) - Google Analytics