• 正则表达式


    一.正则表达式常用方法

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

      字符串判断

        返回真假

        正则.test(字符串)

        例子:是否有不是数字的字符

    var str='abcdef';
    var re=/b/;
    alert(re.test(str));
    /*转义字符
     s:空格
     S:非空格
     d:数字
     D:非数字
     w:字符(字母、数字、下划线_)
     W:非字符
    */
    var str='37482t9348791';
    var re=/D/;
    if(re.test(str)){
        alert('不全是数字');
    }else{
        alert('全是数字');
    }
    

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

      字符串搜索

         返回出现的位置

         字符串.search(正则)

         忽略大小写:i-ignore

    var str='abcdef';
    //不区分大小写
    var re=/B/i;
    //			var re=new RegExp('B','i');
    alert(str.search(re));

    3.match:正则去匹配字符串,如果匹配成功,就返回匹配成功的数组,如果匹配失败就返回null

      获取匹配的项目

        返回数组

        字符串.match(正则)

        量词:+

        全局匹配:g-global

        例子:找出所有数字

    //正则默认:正则匹配成功就会结束,不会继续匹配,如果想全部查找,就要加标识g(全局匹配)
    //量词:匹配不确定的位数
    //+:至少出现一次
    var str='haj123sdk54hask33dkhalsd879';
    //			var re=/d/g;  //[1,2,3,5,4,3,3,8,7,9]
    //			var re=/dd/g;  //[12,54,33,87]
    //			var re=/ddd/g;  //[123,879]
    //			var re=/dddd/g;  //null
    var re=/d+/g;
    alert(str.match(re));
    

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

      替换所有匹配

        返回替换后的字符串

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

        例子:敏感词过滤

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

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

    var str='abc';
    //		var re=/(a)(b)(c)/;//['abc','a','b','c'];
    var re=/(a)(b)(c)/g;//['abc']
    alert(str.match(re));
    

      

        例子:日期格式化

    var str='aaa';
    //			var re=/a/; //baa
    //			var re=/a/g; //bbb
    var re=/a+/g; //b
    str=str.replace(re,'b');
    alert(str);
    
    敏感词过滤 
    		替换前<br />
    		<textarea>菲称仁爱礁附近17艘中国船均在菲军监视之下</textarea><br />
    		替换后<br />
    		<textarea></textarea><br />
    		<input type="button" id="btn" value="确定" />
    
    // |:或的意思
    //replace:第二个参数,可以是字符串,也可以是一个回调函数
    var aT=document.getElementsByTagName('textarea');
    var Btn=document.getElementById('btn');
    
    var re=/菲称|中国船|监视之下/g;
    
    Btn.onclick=function(){
      //  aT[1].value= aT[0].value.replace(re,'*');
           aT[1].value= aT[0].value.replace(re,function(str){
                    //函数的第一个参数,就是匹配成功的字符
                    var result='';
                    for (var i=0;i<str.length;i++) {
                        result+='*';
                    }
                   return result;
             });
    }
    
    日期格式化
    var str='2018-1-23';
    var re=/(d+)(-)/g;
    
    str=str.replace(re,function($0,$1,$2){
        //第一个参数:$0(母亲),第二个参数:$1(第一个孩子)
        //第二个参数:$2(第二个孩子)
        //alert($2);
        return $1+'.';//2018.1.23
    })
    alert(str);
    

    二.正则表达式字符类

      字符类:一组相似的元素

      []中括号的整体代表一个字符

      1.任意字符

        [abc]

        例子:o[usb]t——obt、ost、out

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

     

     2.范围

      [a-z]、[0-9]

      例子:id[0-9]——id0、id5

     3.排除

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

      [^a]

      例子:o[^0-9]t——oat、o?t、ot

    var str='abc';//false
    var str='awc';//true
    var re=/a[^bde]c/;
    alert(re.test(str));
    
    去除标签 
    		替换前<br />
    		<textarea></textarea><br />
    		替换后<br />
    		<textarea></textarea><br />
    		<input type="button" id="btn" value="确定" />
    
    var aT=document.getElementsByTagName('textarea');
    var Btn=document.getElementById('btn');
    //			var re=/<w+>/g;
    var re=/<[^>]+>/g;
    
    Btn.onclick=function(){
        aT[1].value=aT[0].value.replace(re,'');
    }
    

    4.转义字符

      .:任意字符

      .:真正的点

      :独立的部分(起始,结束,空格)

      B:非独立的部分

    var str='abc';
    //中间第二位可以为任意字符
    var re=/a.c/;
    alert(re.test(str));//true
    
    
    
    var str1='onetwo';
    //var re=/one/;//true
    //var re=/one/;//true
    var re1=/one/;//false
    alert(re.test(str));
    

      

     

      

      

  • 相关阅读:
    【野生程序员】:优先招聘
    C#-面向对象:争议TDD(测试驱动开发)
    培训班的同学,拜托不要把用人单位想得那么傻,好不好?!
    为什么要讲数据结构和算法?以及如何学习数据结构和算法
    关于办技术线下社区的一些思考
    做了十年的程序员,为什么我没有加班
    编程新手如何理解“面向对象”
    .NET程序员不加班——写在《华为工程师猝死,36岁,22月无休》之后
    “6年的程序员还不会写委托”,问题在哪?
    现身说法:37岁老码农找工作
  • 原文地址:https://www.cnblogs.com/yangxue72/p/8336936.html
Copyright © 2020-2023  润新知