现在的位置: 首页 > 综合 > 正文

温故知新 javascript 正则表达式

2013年01月15日 ⁄ 综合 ⁄ 共 7412字 ⁄ 字号 评论关闭

原文: http://www.cnblogs.com/libinqq/archive/2008/07/31/1257699.html

 

很长时间没看 正则表达式了,碰巧今天用到,温故知新了一把 看书学习吧

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  正则表达式是分组知识
   
    1) 简单分组
    

Code
 
   2 复杂分组 
 

 

 

Code

 

3   反向引用

 

Code

 

4 候选

 

 

5  非捕获性分组

 

 

    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 边界

 

 

8 多行模式

 

 

 

  至此结束,这些都是 javascript 正则表达式的基本方法,如果你看会了看复杂的正则你会有豁然开朗的感觉。
另外 我知道有些人很懒(包括我),所以正则分组的例子的我特此打包欢迎下载学习  js正则分组

 

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

 

抱歉!评论已关闭.