zoukankan      html  css  js  c++  java
  • 正则表达式

    1,对字符串的操作:查找字符串中的所有数字字符串
    function findnumber(str) {
        var arr =[];
        var tmp='';
        for(var i = 0; i < str.length; i++)
            if(str.charAt(i)<="9" && str.charAt(i)>='0') {
                tmp += str.charAt(i);
            } else {
                if(tmp){
                    arr.push(tmp);
                tmp ='';
                }    
            }
        if(tmp) {
            arr.push(tmp);
        }
        alert(arr);
    }相当于正则表达式的:alert(str.match(/d+/g));
    2,正则表达式:全部遍历字符串规则
    正则表达式主要应用在字符串的筛选和匹配某种语法规则的字符串;
    var re=/ /i->不区分大小写   / /g->全局查找
    var re= new RegExp("字符串","i 或者 g");
    3,元字符
    1,$ 放在最后表示匹配最后一个字符,
    2,[ .....],表示选择方括号中的东西,有或有多个均可匹配;
    3,[ ^....] 表示不包括方括号之间的东西;
     
    4, .  表示除了换行符和其他Unicode码终止符之外的任意字符; 而真正的.在正则表达式为 . 
    5,w 任何ASCII码组成的单词,等价于[a-zA-Z0-9];
    6, W 任何非ASCII码组成的字符,等价于[ ^a-zA-Z0-9];
    7,s 任何Unicode空白符,空格
    8,S 任何非Unicode空白符的字符,注意w和s不一样;
    9,d 任何ASCII数字,等价于[0-9];
    10, D 任何非ASCII数字,等价于[^ 0-9];
    11, :独立的部分(起始,结束,空格)
    12,B:非独立的部分
    例如:
    var str2="one and two";
    alert(/one/g.test(str2)); //true 
    指的是一个独立字符,指的可以是起始位置,也可以是结束位置,最重要的是的空格
    例题:具体使用在getelementByclassname(字符串)的修复bug里
     
    11,{n, m} 表示重复,匹配前一项至少n次至多m次;
    12,{n,  } 表示n次或更多次;
    13,{n} 表示重复n次;
     
    14,? 匹配前一项0或1次,等价 { 0,1};
    15,+ 匹配前一项1 或多次,等价{1,}
    16,* 匹配前一项 0次 或多次,等价于{0,}
    例题:判断是不是扣扣号
    var pattern=/^[1-9]d{4,11}$/
    ^写在正则的最前面的时候代表着起始位置,$写在正则的最后边的时候代码末尾位置
     
    17,分组符 |   / a+ | b+ | c+/   可以匹配到多个a或者多个b多个c;
     
    3,正则表达式的五个方法:
    1,REx.test(string):正则匹配字符串,匹配成功返回true,匹配失败返回false;
    var str = "as12dadasda234asdas897";
    var pattren=/asff/i;
    alert(pattren.test(str)); //false
    2,string.search(Rexg)方法,匹配字符串,如果匹配成功就返回成功的位置,如果匹配失败的话就返回-1;
    var str = "as12dadasda234asdas897";
    console.log(str.search(/d/i));  //2
    正则默认是区分大小写的
    3,string.match()方法:匹配字符串,成功就返回一个数组,如果失败就返回null
    alert(str.match(/d+/g)); // +号指的是出现一次或者多次,
    正则默认:正则匹配成功就就结束了,不会继续,如果想全部查找:/ /g
    4,string.replace(正则,新的字符串):
    var str = "as12dadasda234asdas897";
    str=str.replace(/d+/g,"王瑞睿");  //str的赋值
    console.log(str);
    replace方法的第二个参数可以是一个函数 ,也可以是一个字符串
    var word="王瑞睿是个大帅比王瑞瑞睿是个大帅比王瑞王睿是个大帅比";
    var patt1=/王瑞睿|王瑞瑞睿|王瑞王睿/g;
    var newword=word.replace(patt1,function(str){
        //str函数的第一个参数,就是匹配成功的字符
        var result='';
        alert(str.length);
        for(var i=0;i<str.length;i++){
            result+="*";
        }
        return result;
    })
    console.log(newword);  //***是个大帅比****是个大帅比****是个大帅比
    4,正则的匹配子项,首先使用()来实现分组,将每一个正则都分成一个个的小组,
    把匹配到的字符串看作是一个母亲的话,每一个被括号括起来的都是一个个的子项,所以有时在操作整个字符串不方便的时候就直接操作子字符串
    例如:
    var Str='1031-1-1';
    var patt=/(d+)(-)/g
    var newstrl=Str.replace(patt,function($1,$2,$3){
        //console.log($2);
        //console.log($3);
      return $2+".";
    })
    相同的,match()方法也具有相同的匹配子项,但是match的正则式不能写g
    var Str='1031-';
    alert(Str.match(/(d+)(-)/)) //1031- 1031 -
     
    var str2="abc";
    alert(str2.match(/(a)(b)(c)/)); //abc a b c
    5,正则表达式的字符类:一组相似的元素 []
    [ .....],表示选择方括号中的东西,有或有多个均可匹配;
    [ ^....] 表示不包括方括号之间的东西;
    1,
    var theword="sqw";
    var patt3=/s[weq]w/g
    console.log(patt3.test(theword)); //ture
    console.log(/s[wer]w/g.test(theword)) //false
    console.log(/s[^weq]w/g.test(theword)) //false  排除
    字符类的范围 -:[a-z0-9A-Z]
    var theword2="sqw";
    console.log(/s[a-z]w/g.test(theword))// true
    console.log(/s[a-c]w/g.test(theword))  //false
    例题:过滤标签
    逆向思维:
    var pattern=/<[^>]+>/g 就匹配到了所有的html标签
    第一:先保证<>之间的内容不为空,第二:直接忽略了<>内容的多少
    6,当正则需要传参的时候,一定要使用全称初始化(var re= new RegExp("字符串","i 或者 g"); )
    function getelementByclassname(classname){
    var patt=new Rexg("\d"+classname+"\d");
             //在d前面加的原因是因为js不能正常的输出特殊字符,在前面加进行解析
    }
    7,重复子项 (n is a index)
    var str3="abca";
    var patt4=/(a)(b)(c)1/g //在正则表达式中,空格都具有意义,所以要求你的输入一定要规范
    alert(patt4.test(str3));
    在正则表达式中,所有使用()括起来的子项都被赋予了一个索引值,使用这个索引值就可以直接访问每一个子项,所以在上边的代码中的 1 指的就是(a);并且要求每 一个索引子项的值与初始子项要相同
    例如:
    var re=/ww/g; ->c9(ture) cc(true)
    var Re=/(w)1/;->c9(false) cc(true)
    经常会用到正则的地方:匹配与正则表达式前边一样的东西
    例题:
    var tstr="sssafgdfsdsssasdvcbvbcb";
        var arr=tstr.split('');
        arr=arr.sort().join('');
         var tpatt=/(w)1+/g;
         var themax=0;
         var thevalue;
         arr.replace(tpatt,function($1,$2){  //匹配子项的应用
             if($1.length>themax){
                 themax=$1.length;
                 thevalue=$2;
             }
             
         })
         alert(thevalue+":"+themax);  //s:8
    8,在实际应用中,我们都直接把正则用一个json对象包裹,使用的时候,极其方便
    var Json = {
                    "中文":/u4e00-u9fa5/,
                    "email":/w+([-+.]w+)*@w+([-.]w+)*.w+([-.]w+)*/,
                    "telnum":/d{3}-d{8}|d{4}-d{7}/,
                    "qq":/[1-9][0-9]{4,}/,
                    "ip":/d+.d+.d+.d+/,
                }
    alert(Json.email.test("986778566@qq.com"));
  • 相关阅读:
    js如何实现上拉加载更多...
    基于epoll的TP传输层实现
    ActiveMQ简介与安装
    序列化和反序列化实现
    NoSQL之Redis数据库初探
    分布式缓存之memcached--命令测试
    Java正则表达式测试用例
    Java之正则表达式
    Java反射机制练习(增强可扩展性)
    Java反射机制(获取Class对象的三种方式+获取Class中的构造函数进行对象的初始化+获取反射类的字段+获取反射类的一般方法)
  • 原文地址:https://www.cnblogs.com/laiso/p/7875519.html
Copyright © 2011-2022 走看看