美文网首页
正则表达式

正则表达式

作者: llpy | 来源:发表于2017-02-06 19:35 被阅读22次

    创建正则表达式

    var r = /a/;
    

    正则.test(字符串)

    正则去匹配字符串,如果匹配成功就返回真,如果匹配失败就返回假

    var str = 'abcdef';
    var re = /b/;
    
    alert( re.test(str) );
    

    转义字符

    \s : 空格
    \S : 非空格
    \d : 数字
    \D : 非数字
    \w : 字符 ( 字母 ,数字,下划线_ )
    \W : 非字符

    (大写都是反义)

    例子: 判断是否全为数字

    var str = '374829348791';
    
    var re = /\D/;
    
    if( re.test(str) ){
        alert('不全是数字');
    }
    else{
        alert('全是数字');
    }
    

    字符串.search(正则)

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

    var str = 'abcdef';
    
    var re = /b/;
    
    alert( str.search(re) );
    

    正则中的默认 : 是区分大小写的
    如果不区分大小写的话,在正则的最后加标识 i

    var str = 'abcdef';
    
    var re = /B/i;
    
    alert( str.search(re) );
    

    字符串.match(正则)

    正则去匹配字符串,如果匹配成功,就返回匹配成功的数组,如果匹配不成功,就返回null

    var str = 'haj123sdk54hask33dkhalsd879';
    
    var re = /\d/;
    
    alert( str.match(re) );
    

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

    var str = 'haj123sdk54hask33dkhalsd879';
    
    var re = /\d/g;
    
    alert( str.match(re) );
    

    查找连在一起的数字

    var str = 'haj123sdk54hask33dkhalsd879';
    
    var re = /\d\d/g;
    
    alert( str.match(re) );//只会找到12 54 33 87
    

    量词 : 匹配不确定的位置
    + : 至少出现一次

    var str = 'haj123sdk54hask33dkhalsd879';
    
    var re = /\d+/g;
    
    alert( str.match(re) );
    

    字符串.replace(正则,新的字符串)

    正则去匹配字符串,匹配成功的字符去替换成新的字符串

    var str = 'aaa';
    var re = /a+/g;
    
    str = str.replace(re,'b');
    
    alert(str);
    

    例子:关键字过滤

    //菲称仁爱礁附近17艘中国船均在菲军监视之下
    
    //| : 或的意思
    
    //replace : 第二个参数:可以是字符串,也可以是一个回调函数
    
    var aT = document.getElementsByTagName('textarea');
    var oInput = document.getElementById('input1');
    
    var re = /菲称|中国船|监视之下/g;
    
    oInput.onclick = function(){
        
         //aT[1].value = aT[0].value.replace(re,'*');
         
         aT[1].value = aT[0].value.replace(re,function(str){
        //函数的第一个参数:就是匹配成功的字符     
        
             //alert( str );
             
             var result = '';
             
             for(var i=0;i<str.length;i++){
                 result += '*';
             }
             
             
             return result;
             
         });
        
    };
    

    匹配子项 : 小括号 () (还有另外一个意思,分组操作)

    把正则的整体叫做(母亲)
    然后把左边第一个小括号里面的正则,叫做这个第一个子项(母亲的第一个孩子)
    第二个小括号就是第二个孩子

    var str = '2013-6-7';
    
    var re = /(\d+)(-)/g;
    
    str = str.replace(re,function($0,$1,$2){
        //第一个参数:$0(母亲),第二个参数 : $1(第一个孩子)
        //,第二个参数 : $1(第二个孩子)
        
        //alert( $2 );
        
        return $1 + '.';
        
    });
    
    alert( str );   //2013.6.7
    

    字符类

    一组相似的元素 [] 中括号的整体代表一个字符

    var str = 'abc';
    
    var re = /a[bde]c/;
    
    alert( re.test(str) );
    

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

    var str = 'afc';
    
    var re = /a[^bde]c/;
    
    alert( re.test(str) );
    
    var str = 'abc';
    
    var re = /a[a-z0-9A-Z]c/;
    
    alert( re.test(str) );
    

    例子:过滤标签

    替换前<br />
    <textarea>
    </textarea><br />
    替换后<br />
    <textarea>
    </textarea><br />
    <input type="button" value="确定" id="input1" />
    <script>
    window.onload = function(){
        var aT = document.getElementsByTagName('textarea');
        var oInput = document.getElementById('input1');
        
        //var re = /<\w+>/g;
        
        var re = /<[^>]+>/g;
        
        oInput.onclick = function(){
            
            aT[1].value = aT[0].value.replace(re,'');
            
        };
        
    };
    </script>
    

    转义字符

    . : 任意字符
    . : 真正的点

    \b : 独立的部分 ( 起始,结束,空格 )
    \B : 非独立的部分

    //var str = 'one two';
    var str = 'onetwo';
    
    var re = /one\b/;
    
    alert( re.test(str) );
    

    量词 : {}

    {4,7} : 最少出现4次,最多出现7次
    {4,} : 最少出现4次
    {4} : 正好出现4次

    • : {1,}
      ? : {0,1} : 出现0次或者1次
    • : {0,} : 至少出现0次*/

    例子:判断是不是qq号

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

    邮箱:

    var re = /^\w+@[a-z0-9]+(\.[a-z]+){1,3}$/;
    

    重复的子项

    \1 : 重复的第一个子项
    \2 : 重复的第二个子项

    var str = 'abca';
    
    var re = /(a)(b)(c)\2/;
    
    alert( re.test(str) )
    

    下面写法的区别

    var re = /\w\w/;  //c9
    var re = /(\w)\1/; //cc 99
    

    例子: 找重复项最多的字符和个数

    var str = 'assssjdssskssalsssdkjsssdss';
    
    var arr = str.split('');
    
    str = arr.sort().join('');
    
    //alert(str);
    
    var value = '';
    var index = 0;
    
    var re = /(\w)\1+/g;
    
    str.replace(re,function($0,$1){
        
        //alert($0);
        
        if(index<$0.length){
            index = $0.length;
            value = $1;
        }
        
    });
    
    alert('最多的字符:'+value+',重复的次数:'+index);
    

    相关文章

      网友评论

          本文标题:正则表达式

          本文链接:https://www.haomeiwen.com/subject/chiwbttx.html