正则表达式

  1、正则都是操作字符串的

  2、正则写法:

    var re=//;

    var re=new RegExp();

    var re=/a/;   var re=new RegExp('a');

  3、test:正则去匹配字符串,如果匹配成功就返回真,否则为假

    test的写法:正则.test(字符串);

  4、转义字符:

    \n:换行

    \r:指表

    \t:回车

    \s:空格

    \S:非空格

    \d:数字

    \D:非数字

    \w:字符  (字母,数字,下划线)

    \W:非字符

    . :任意字符

    \.:真正的点

    \b:独立部分(是起始结束空格才算匹配成功)独立部分的应用:获取class元素

    \B:非独立部分

    \1:重复的第一个子项   应用:找重复项最多的字符和个数

    \2:重复的第二个子项

     ..... 

    例: 

      var str='abc';

      var re=/a.c/;

      alert(re.test(str));//结果为true

      var str='a.c';

      var re=/a\.c/;

      alert(re.test(str));//结果为true

      var str='abc';

      var re=/a\.c/;

      alert(re.test(str));//结果为false

 

      var str='onetwo';

      var re=/\bone/;

      alert(re.test(str));//结果为true

      var str='onetwo';

      var re=/one\b/;

      alert(re.test(str));//结果为false

      var str='one two';

      var re=/one\b/;

      alert(re.test(str));//结果为true

      var str='onetwo';

      var re=/\bone\b/;  

      alert(re.test(str));//结果为false 都得满足才算成功

  

      var str='abca';

      var re=/(a)(b)(c)\1/  

      alert(re.test(str));// 结果为true

      var re=/\w\w/;  如果匹配的字符为cb,结果为true,因为只要两个都是字符就可以成功

      var re=/\w\1/;如果匹配的字符为cb,结果为false,如果匹配cc或bb才会是true,只有前一个与后一个相同才为true

  5、search:正则去匹配字符串,如果匹配成功,就返回匹配成功的位置,如果匹配失败就返回-1

    写法:字符串.search(正则);

  6、正则中默认区分大小写,如果不区分大小写,则需要在正则最后加标识 i

    var re=/B/i;

    var re=new RegExp('B','i');

  7、match:正则去匹配字符串,如果匹配成功,就匹配成功的数组,否则返回null。

      正则默认:正则匹配成功就会结束,不会再继续匹配,如果想全部查找,就要加标识g(全局匹配)

    量词:匹配不确定的位置 

      +:至少出现1次

    写法:字符串.match(正则)

    var re=/\d/g;

  8、replace:正则去匹配字符串,匹配成功的字符去替换成新的字符串

    replace写法:字符串.replace(正则,想要替换新的字符串);

    replace的第二个参数可以是字符串也可以是回调函数

    例:var str='aaa';

      var re=/a/;  //结果为baa

      var re=/a/g;  //结果为bbb

      var re=/a+/g;  //结果为b

      str=str.replace(re,'b');

  9、“|”在正则中表示或的意思

    var re=/a|b|c/;

  10、匹配子项:小括号()---分组操作   如果把正则整体叫做母亲,则小括号里面的正则交做子项

     str.replace(re,function($0,$1,$2){

      //第一个参数$0(母亲),$1第一个孩子,$2第二个孩子

     });

    var str='abc';

    var re=/(a)(b)(c)/;

    alert(str.match(re));  //结果[abc,a,b,c]-------当match不加g的时候才可以获取到子项的集合

  11、 字符类:一组相似元素  []中括号整体代表一个字符,也就是说,括号中的任意一个字符与要匹配的字符串中对应位置的字符相同

    var str='abc';

    var re=/a[bde]c/;

    alert(re.test(str));//结果为true

    var str='abdc';

    var re=/a[bde]c/;  //---[bde]整体对应b

    alert(re.test(str));//结果为false

  12、排除:^如果写在[]里面的话,就代表排除的意思 

    var str='abc';

    var re=/a[^bde]c/;  //不是bde的任意一个

    alert(re.test(str));  //结果为false

  13、范围:-可以表示范围,注意范围需要从小到大

    var re=/a[a-z0-9]+c/; a到z的字母 0-9数字

  14、当正则需要传参的时候,一定要用全称的写法

    例:独立部分的应用:获取class元素     class='box1'  class='box1 box2' class='box1box2'  中'box1'

    function getClass(oParent,sClass){

      var arr=[];

      var aEle=oParent.getElementsByTagName('*');

      var re=new RegExp('\\b'+sClass+'\\b');

      for(var i=0;i<aEle.length;i++){

        if(re.test(aEle[i].className)){

          arr.push(aEle[i]);

        }

      }

    }

  15、应用:找重复项最多的字符和个数

  

            var str='adfaaacddaaasssssghhsjksffs'
            var arr=str.split('');//拆分成数组
            str=arr.sort().join('');//拆分数组后排序,使得相同字母挨在一起,再转化为字符串
            var value='';
            var index=0;
            var re=/(\w)\1+/g;
            str.replace(re,function ($0,$1) {
                if(index<$0.length){
                    index=$0.length;
                    value=$1;
                }
            });
            alert('最多的字符:'+value+',重复的次数'+index);
        }

  16、量词: 不确定位置出现的次数

    {n,m}至少出现n次,最多出现m次

    {n,} 至少n次

    {n}正好n次

    * 任意次     {0,}

    ?零次或1次  {0,1}

    +一次或任意次  {1,}

  17、 \d*表示零次或多次数字

  18、^如果写在正则最开始的位置,代表起始的意思,

    $如果写在正则的最后位置,代表结束的意思

    例:查找QQ号

    var re=/^[1-9]\d{4,11}$/; 

    如何去掉字符串中的前后空格

    var re =/^\s+|\s+$/g;

      str.replace(re,'');

  19、高级表单校验

     匹配中文:[\u4e00-\u9fa5]

     行首行尾空格:^\s*|\s*$

     Email:^\w+@[a-z0-9]+(\.[a-z]+){1,3}$

       网址:[a-zA-Z]+://[^\s]*

     QQ号:[1-9][0-9]{4,9}

     邮政编码:[1-9]\d{5}

     身份证:[1-9]\d{14}|[1-9]\d{17}[1-9]\d{16}x

 

posted @ 2016-08-14 21:52  Heroine.z  阅读(277)  评论(0编辑  收藏  举报