温故知新 javascript 正则表达式

时间:2022-12-15 18:39:12
很长时间没看 正则表达式了,碰巧今天用到,温故知新了一把 看书学习吧
50% 的举一反三练习中的原创。
 
一 javascript正则表达式的基本知识

1     javascript 正则对象创建 和用法

声明javascript 正则表达式
    
     var reCat = new RegExp("cat");
      你也可以 
     var reCat = /cat/;      //Perl 风格   (推荐)

2 学习最常用的 test exec match search  replace  split 6个方法

1) test  检查指定的字符串是否存在

var data = "123123";
       var reCat = /123/gi;
       alert(reCat.test(data));  //true
     
       //检查字符是否存在  g 继续往下走  i 不区分大小写

2) exec 返回查询值

var data = "123123,213,12312,312,3,Cat,cat,dsfsdfs,";
       var reCat = /cat/i;
       alert(reCat.exec(data));  //Cat

3)match  得到查询数组

var data = "123123,213,12312,312,3,Cat,cat,dsfsdfs,";
       var reCat = /cat/gi;
       var arrMactches = data.match(reCat)

for (var i=0;i < arrMactches.length ; i++)
       {
            alert(arrMactches[i]);   //Cat  cat
       }

4) search  返回搜索位置  类似于indexof

var data = "123123,213,12312,312,3,Cat,cat,dsfsdfs,";
       var reCat = /cat/gi;
       alert(data.search(reCat));  //23

5) replace  替换字符  利用正则替换

var data = "123123,213,12312,312,3,Cat,cat,dsfsdfs,";
       var reCat = /cat/gi;
       alert(data.replace(reCat,"libinqq"));

6)split   利用正则分割数组

var data = "123123,213,12312,312,3,Cat,cat,dsfsdfs,";
       var reCat = /\,/;
       var arrdata = data.split(reCat);

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

3  学习下  简单类   负向类  范围类  组合类

//简单类
       var data = "1libinqq,2libinqq,3libinqq,4libinqq";
       var reCat = /[123]libinqq/gi;
       var arrdata = data.match(reCat);

for (var i = 0; i < arrdata.length; i++)
       {
            alert(arrdata[i]);  // 1libinqq 2libinqq  3libinqq
       }

//负向类
       var data = "alibinqq,1libinqq,2libinqq,3libinqq,4libinqq";  //\u0062cf
       var reCat = /[^a123]libinqq/gi;
       var arrdata = data.match(reCat);

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

//范围类
       var data = "libinqq1,libinqq2,libinqq3,libinqq4,libinqq5";  //\u0062cf
       var reCat = /libinqq[2-3]/gi;
       var arrdata = data.match(reCat);

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

//组合类
      var data = "a,b,c,w,1,2,3,5";  //\u0062cf
       var reCat = /[a-q1-4\n]/gi;
       var arrdata = data.match(reCat);

for (var i = 0; i < arrdata.length; i++)
       {
            alert(arrdata[i]);  // a b c 1 2 3
       }

这些都是 js正则 最基本的使用方法,温故知新 javascript 正则表达式看不会的请复制到笔记本练习下,看会了再往下面看。

 
二  javascript  正则表达式是分组知识
   
    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 正则表达式的基本方法,如果你看会了看复杂的正则你会有豁然开朗的感觉。
另外 我知道有些人很懒(包括我温故知新 javascript 正则表达式),所以正则分组的例子的我特此打包欢迎下载学习  js正则分组

其实还有 断言 回逆 等 3~5种的正则,一看表12点了,又要举例子又要翻译,吐血,还是算了,我还是春梦了无痕吧。

温故知新 javascript 正则表达式的更多相关文章

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

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

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

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

  3. 理清JavaScript正则表达式--上篇

    在JavaScript中,正则表达式由RegExp对象表示.RegExp对象呢,又可以通过直接量和构造函数RegExp两种方式创建,分别如下: //直接量 var re = /pattern/[g | ...

  4. 理清JavaScript正则表达式--下篇

    紧接:"理清JavaScript正则表达式--上篇". 正则在String类中的应用 类String支持四种利用正则表达式的方法.分别是search.replace.match和s ...

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

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

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

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

  7. Python自动化 【第十八篇】:JavaScript 正则表达式及Django初识

    本节内容 JavaScript 正则表达式 Django初识 正则表达式 1.定义正则表达式 /.../  用于定义正则表达式 /.../g 表示全局匹配 /.../i 表示不区分大小写 /.../m ...

  8. JavaScript正则表达式下——相关方法

    上篇博客JavaScript 正则表达式上——基本语法介绍了JavaScript正则表达式的语法,有了这些基本知识,可以看看正则表达式在JavaScript的应用了,在一切开始之前,看看RegExp实 ...

  9. JavaScript 正则表达式上——基本语法

    定义 JavaScript种正则表达式有两种定义方式,定义一个匹配类似 <%XXX%> 的字符串 1. 构造函数 var reg=new RegExp('<%[^%>]+%&g ...

随机推荐

  1. 用vue&period;js学习es6(五):set和map的使用

    一:Set用法: ES6提供了新的数据结构Set.它类似于数组,但是成员的值都是唯一的,没有重复的值. (1).打印:console.log var data = new Set([1,2,3]); ...

  2. display转块状化

        display:block           block元素会独占一行,多个block元素会各自新起一行.默认情况下,block元素宽度自动填满其父元素宽度.         block元素 ...

  3. Appium 客户端库 API

    ## Appium 客户端库 Appium 有对应以下语言的客户端库: 语言 | 代码 :--|--:[Ruby][rubygems] | [GitHub](https://github.com/ap ...

  4. Inno Setup使用上的几个问题

    Inno Setup使用上的几个问题 分类: Install Setup 2013-02-02 15:48 1781人阅读 评论(0) 收藏 举报 Inno Setup使用上的几个问题: [问题一:I ...

  5. GCC 嵌入汇编代码

    The format of basic inline assembly is very much straight forward. Its basic form is 基本汇编嵌入格式如下: asm ...

  6. Android开发之适配器-ListView适配器的重复数据

    适配器是Android中的数据与View视图的桥梁,作用就是将数据通过适配器显示到对应的View视图上. 工作中,在用ListView做适配器数据时候,有些人肯定碰见过,如何优化效率,但是又出现重复数 ...

  7. Spring源码解析三:IOC容器的依赖注入

    一般情况下,依赖注入的过程是发生在用户第一次向容器索要Bean是触发的,而触发依赖注入的地方就是BeanFactory的getBean方法. 这里以DefaultListableBeanFactory ...

  8. Java 锁机制 synchronized

    转载请标明出处:http://blog.csdn.net/zhaoyanjun6/article/details/75126630 本文出自[赵彦军的博客] 1.前言 在多线程并发编程中Synchro ...

  9. Node&period;js&lowbar;express&lowbar;临时会话对象 session

    临时会话对象 session 也是用来 解决 http 无状态协议的问题(无法区分多次请求是否发送自同一客户端) npm install express-session npm install con ...

  10. SSM的,日常错误

    org.springframework.beans.factory.BeanCreationException: Could not autowire field: private com.imooc ...