首页 > 技术文章 > JavaScript中的正则表达式

mengwenbiao 2020-08-14 21:10 原文

一、正则表达式

  正则表达式是规则,是让计算机能够读懂的人类制定的规则

二、量词

*

匹配前面的子表达式任意次。例如,zo*能匹配“z”,也能匹配“zo”以及“zoo”。*等价于{0,}。

+

匹配前面的子表达式一次或多次(大于等于1次)。例如,“zo+”能匹配“zo”以及“zoo”,但不能匹配“z”。+等价于{1,}。

?

匹配前面的子表达式零次或一次。例如,“do(es)?”可以匹配“do”或“does”。?等价于{0,1}。

{n}

n是一个非负整数。匹配确定的n次。例如,“o{2}”不能匹配“Bob”中的“o”,但是能匹配“food”中的两个o。

{n,}

n是一个非负整数。至少匹配n次。例如,“o{2,}”不能匹配“Bob”中的“o”,但能匹配“foooood”中的所有o。“o{1,}”等价于“o+”。“o{0,}”则等价于“o*”。

{n,m}

mn均为非负整数,其中n<=m。最少匹配n次且最多匹配m次。例如,“o{1,3}”将匹配“fooooood”中的前三个o为一组,后三个o为一组。“o{0,1}”等价于“o?”。请注意在逗号和两个数之间不能有空格。

三、正则表达式在javascript中的声明

  1.var  名称=/规则/;

  2.var reg =new RegExp("规则");

g===>global 全局,

i===>ignore 忽略大小写

    范围:

      \d   <=> [0-9]

      [范围]===》[a-z]  [A-Za-z] ,[13579] [1-37-9]

      [^范围] ====》不在范围内的 [^2-6]

      |  x|y  ==  [xy]

      ()===>整体  1(3\d)|(8[13589])|(7[136])

  实例:

  1.判断输入的电脑号码是否正确

  

电话号码:<input type="text" name="tel" id="mytel" required="required" 
      placeholder="请输入电话号码" pattern="^(\+86)?1((3[0-9])|(5[0-9])|(7[135-8])|(8[0-35-9])|(9[17]))\d{8}$"/>
/*分析  

1. +86可以出现一次或0次
2.号段:13[0-9],15[0-9],166,17[135-8],18[0-35-9],19[17]
3.\d{8}

/*

  2.判断邮箱是否输入正确

分析:

  1.开头:[A-Za-z0-9]{5,16}
  2.必须包含的符号:@
  3.@后面跟的字符:[a-z0-9]{2,5}
  4.(.com|.cn)

邮箱:<input type="email" id="mail" name="mail" required="required" placeholder="请输入邮箱"
                pattern="^[A-Za-z0-9]{5,16}@[a-z0-9]{2,5}\.((com)|(cn))$" title="请输入正确的邮箱"
                 />

  3.判断是否为非负整数

<input type="text"  pattern="^0|[1-9]\d*$" />

  4.判断是否为整数

<input type="text" pattern="^-?([1-9]\d*)|0$"/>

  5.var str1="w34r384hugw949843hg37rdfhasi723hhiay29";从这个字符串中匹配出所有数字。

str1.match(/\d+/g);

    匹配所有字符:

str1.match(/[a-zA-Z]+/g);

  6. 给定任意字符串,统计字符串中,每个字符以及每个字符出现的次数,例如例如:var str1="aaaabbbbbccddd";

<!DOCTYPE html>
<html>
    <head>
        <meta charset="UTF-8">
        <title></title>
    </head>
    <body>
    </body>
    <script type="text/javascript">
        //1. 给定任意字符串,统计字符串中,每个字符以及每个字符出现的次数
        //   例如:var str1="aaaabbbbbccddd"; b,5
        var str1="aaaaabbbbbccdddeee";
        var result=[];
        
        while(str1!=""){
            //获取第一个字符
            var fchar=str1[0];
            //创建正则表达式对象
            var reg=new RegExp(fchar,"g");
            //替换 字符串中,符合的 字符
            var res=str1.replace(reg,"");
            // 第一个字符在原字符串中出现的次数
            var len=str1.length-res.length;
            var obj={};
             obj.ch=fchar;
             obj.count=len;
             result.push(obj);
            //把替换后的字符串,赋值给 str1 这个变量
            str1=res;
        }
       for(var i=0;i<result.length;i++){
               document.write(result[i].ch+":"+result[i].count+"次");
               document.write("<br>");
       }
        
    </script>
</html>

  7.求100~10000以内的“回文数”

<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8">
        <title></title>
    </head>
    <body>
        <script type="text/javascript">
         for(var i=100;i<10000;i++){
             var str=i.toString();
             var arr= str.match(/\d/g);
             if(i<1000 && arr[0]==arr[2]){
                 document.write(i);
                document.write("<br>");
             }
             else if(arr[0]==arr[3] && arr[1]==arr[2])
             {
                 document.write(i);
                document.write("<br>");
             }
         }
        </script>
    </body>
</html>

  8.验证输入的邮箱是否正确

<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8" />
        <title></title>
    </head>
    <body>
        js验证邮箱:  <input type="text" id="input1"  />
        <input type="button" id="btn1" value="验证"/>
        
    </body>
    <script type="text/javascript">
        //var btn=document.getElementById("btn1");
        var btn =document.getElementById("input1");
        btn.onblur=function(){
//            var obj=document.getElementById("input1");
            var str=this.value;
//            var reg=new RegExp();
            var reg = /^[a-zA-Z0-9]{6,11}@(sina\.cn|126\.com|163\.com|qq\.com)$/;
            
            if(reg.test(str)){
                alert("通过");
            }
            else{
                this.style.border="1px solid red";
                alert("输入有误");
            }
            
        };
        var dd=document.getElementById("input1");
        dd.onfocus=function(){
            this.style.border="none";
        }
    </script>
</html>

 

推荐阅读