js中的正则表达式

复习字符串操作

  • search         查找
  • substring     获取子字符串
  • charAt         获取某个字符
  • split             分割字符串,获得数组

找出字符串中的所有数字:

  • 用传统字符串操作完成
  • 用正则表达式完成
<script>
        var str='12 fff 87 er334 233 -=-=fa80';
        /*
        //传统的方法
        var arr=[];
        var tmp='';
        for(var i=0;i<str.length;i++){
            if(str.charAt(i)>='0' && str.charAt(i)<='9'){
                tmp+=str.charAt(i);
            }else{
                if(tmp){
                    arr.push(tmp);
                    tmp='';
                }
            }
        }

        if(tmp){
            arr.push(tmp);
            tmp='';
        }
        alert(arr);*/
        //正则
        alert(str.match(/\d+/g))
    </script>

什么是正则表达式:

  • 正则:规则、模式
  • 强大的字符串匹配工具
  • 是一种正常人类很难读懂的文字
  • RegExp对象
  •        JS风格——new RegExp("a","i");
  •        per风格——/a/i
<script>
        var re=new RegExp('a');
        var r=/a/;
        var str='abcdef';

        alert(str.search(re));
</script>
 <script>
        /*i为忽略大小写*/
        var re=new RegExp('a','i');
        var r=/a/i;
        var str='abcdef';

        alert(str.search(re));
</script>

字符串与正则配合:

  • search    只能找出来字符出现的位置
  •        字符串搜索
  •                返回出现的位置
  •                忽略大小写:i——ignore
  •                判断浏览器类型

 

  • match      把符合要求的东西提出来
  •      获取匹配的项目
  •             量词:+
  •             量词变化:\d  \d\d和\d+
  •             全局匹配:g——global
  •             例子:找出所有数字

 

  • replace
  •        替换所有匹配
  •               返回替换后的字符串
  •               例子:敏感词过滤

在正则表达式中,\d是转义——数字

<script>
    var str='adsw 349fw fjnfwef 45';
    var re=/\d/;
    alert(str.search(re));//5  因为3出现在5的位置
</script>
<script>
        var str='adsw 349fw fjnfwef 45';
        var re=/\d/;
        alert(str.match(re));//3  只告诉计算机找数字,没告诉计算机找几个
        var all1=/\d/g;
        alert(str.match(all1));//3,4,9,4,5
        var all2=/\d\d/g;
        alert(str.match(all2));//34,45
        var all3=/\d\d\d/g;
        alert(str.match(all3));//349
        var all=/\d+/g;//+的意思的是若干
        alert(str.match(all));//349,45
</script>
<script>
        var str='abc aaa erw';
        /*alert(str.replace('a','0'));//0bc aaa erw*/
        /*var re=/a/;
        alert(str.replace(re,'0'));//0bc aaa erw*/
        var re=/a/g;
        alert(str.replace(re,'0'));//0bc 000 erw
    </script>

敏感词过滤:

 <script>
 window.onload=function(){
            var txt1=document.getElementById('txt1');
            var obtn=document.getElementById('btn');
            var txt2=document.getElementById('txt2');

            obtn.onclick=function(){
                var re=/淘宝|北京|京东/g;
                txt2.value=txt1.value.replace(re,'***')
            }
        }

</script>
</head>
<body>
<textarea name="" id="txt1" cols="30" rows="10"></textarea>
<input type="button" id="btn" value="过滤"/>
<textarea name="" id="txt2" cols="30" rows="10"></textarea>
</body>

元字符(方括号):

[abc]pc      

apc bpc cpc符合要求      dpc不符合要求

<script>
        var str='apc xpc ppc bpc spc tpc';
        var re=/[apx]pc/g;
        alert(str.match(re))//apc,xpc,ppc
</script>
  • [a-z]  [^a-z](除了a-z)   [0-9]——\d
  • [^a-z0-9]  除了a-z0-9

 

  • 组合
  •       [a-z0-9A-Z]
  • 实例:偷小说(过滤HTML标签)
  • 转义字符
  •         .(点)——任意字符
  •          \d、\w、\s
  •         \D、\W、\S
<script> 
window.onload=function(){
            var txt1=document.getElementById('txt1');
            var obtn=document.getElementById('btn');
            var txt2=document.getElementById('txt2');
            //过滤掉HTML标签 <全部字符>
            obtn.onclick=function(){
                //var re=/<.+>/g;//正则表达式很贪婪,删掉尽可能多的东西。<a>hfuiwhew</a><o>dwcerewfew</o>,类似这样的,会把<a></o>内的东西删掉
                //<除了<>以外的任意字符>
                var re=/<[^<>]+>/g;
                txt2.value=txt1.value.replace(re,' ')
            }
        }
</script>

转义字符:

  • \d     数字    [0-9]            \D   [^0-9]
  • \w    英文、数字、下划线    [a-z0-9_]            \W     [^a-z0-9_]    
  • \s     空白字符        \S非空白字符
  • 尽量在正则中不用.

 

量词:个数

  • {n}   正好出现n次。
  • {n,m} 最少n次,最多m次。
  • {n,}  最少n次,最多不限
  • + 其实实际上就是 {1,}
  • ?  {0,1} 最少0次最多1次  可有可无的
  • *  {0,} 最好不用

qq号:8位。第一位不能是0.   [1-9]\d{7}

qq号:最少5位最多8位。 [1-9]\d{4,10}

固定电话:010-87496698   010是可有可无的          (0\d{2,3}-)?[1-9]\d{7}(-\d{1,5})?

 

表单校验实例:

  • test()检验是否符合正则的规则。

邮箱:一串英文、数字、下划线    @    一串英文、数字    .    一串英文

                                   \w+             @         [a-z0-9]+         \.    [a-z]+

<script>
        window.onload=function(){
            var oTxt=document.getElementById('txt1');
            var oBtn=document.getElementById('btn1');
            oBtn.onclick=function(){
                var re=/\w+@[a-z0-9]+\.[a-z]+/i;
                if(re.test(oTxt.value)){
                    alert('合法的邮箱');
                }else{
                    alert('你写错了')
                }
            }
        }
    </script>
</head>
<body>
<input type="text" id="txt1"/>
<input type="button" id="btn1" value="校验"/>

</body>

假如----是dancingblue@126.com,也会返回 合法的邮箱。原因是text()方法,字符串一部分符合要求,则返回true.

如果^出现在[]中,[^ ].^的意思是除了。^如果不出现在[]中,代表行首(字符串的开头)。$代表行尾(字符串的结尾)

把re改成以下就正确了:

var re=/^\w+@[a-z0-9]+\.[a-z]+$/i;

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值