前端学习——23——js正则表达式

一:转义符

<!DOCTYPE html>
<html lang="en">

<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <meta http-equiv="X-UA-Compatible" content="ie=edge">
  <title>Document</title>
</head>
      <!-- 
        1:转义字符 "\" 反斜杠会把自己后面跟的字符转义成文本
        2:多行字符串
        3:字符串换行符\n
        4:缩进4个空格 \t
       -->
<body>
       <script>
       var str="abcd\"edf";
       console.log(str);
       var str1="abcd\\edf";
       console.log(str1);
       var str2="abcd\nedf";//换行
       console.log(str2);
       var str3="abcd\tedf";
       console.log(str3);
       </script>
    

</body>

</html>

系统规定字符串不能多行显示:

这样写直接报错

<!DOCTYPE html>
<html lang="en">

<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <meta http-equiv="X-UA-Compatible" content="ie=edge">
  <title>Document</title>
</head>
   
<body>
       <script>
     
       document.body.innerHTML="
       <div></div>
       <span>123</span>";

       </script>
    

</body>

</html>

正确写法:

<!DOCTYPE html>
<html lang="en">

<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <meta http-equiv="X-UA-Compatible" content="ie=edge">
  <title>Document</title>
</head>
   
<body>
       <script>
      document.body.innerHTML="<div></div><span>123</span>";
      </script>
    

</body>

</html>
<!DOCTYPE html>
<html lang="en">

<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <meta http-equiv="X-UA-Compatible" content="ie=edge">
  <title>Document</title>
</head>
   
<body>
       <script>
         //方法一:
      //每行结束加个转义字符,会将后面文本形式的回车转义掉,不再是回车
      document.body.innerHTML="\
      <div></div>\
      <span>123</span>\
      ";
      //方法二:字符串连接,比较low
      document.body.innerHTML=
     " <div></div>"+
      "<span>123</span>";
      
      </script>
    

</body>

</html>

 

二:正则表达式 RegExp

1:正则表达式的作用:匹配特殊字符或有特殊搭配原则的字符的最佳选择

<!DOCTYPE html>
<html lang="en">

<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <meta http-equiv="X-UA-Compatible" content="ie=edge">
  <title>Document</title>
</head>
   
<body>
       <!-- 检验是否符合规则 -->
      email:<input type="text" value="">
       <script>

      </script>
    

</body>

</html>

 

三:RegExp两种创建方式 

1:直接量

<!DOCTYPE html>
<html lang="en">

<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <meta http-equiv="X-UA-Compatible" content="ie=edge">
  <title>Document</title>
</head>
   
<body>
       <script>
         //正则表达式创建方式
        var reg=/abc/; //代表匹配字符串的规则是abc,测验表达式是否有自己规定的片段,这个字符串必须有abc,且是小写,并且要挨着
        var str="abcd";
        var str1="abec";

        //正则表达式的属性  属性可单独 也可以写在一起,例如:var reg=/abcd/im;
        var reg=/abcd/i;//ignoreCase忽视大小写
        var str2="ABCd";//成立


      </script>
    

</body>

</html>

            

2:new RegExp();

<!DOCTYPE html>
<html lang="en">

<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <meta http-equiv="X-UA-Compatible" content="ie=edge">
  <title>Document</title>
</head>
   
<body>
       <script>
        //括号里第一参数里写规则 第二个参数写属性
         var str="abcd";
         var reg=new RegExp("abcd","i");
       </script>
</body>

</html>

推荐使用直接量

正则表达式的属性:

<!DOCTYPE html>
<html lang="en">

<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <meta http-equiv="X-UA-Compatible" content="ie=edge">
  <title>Document</title>
</head>

<body>
  <script>
    //三个属性  i忽视大小写  g全局匹配   m执行多行匹配
    //g全局匹配实例 查找所有匹配,而非在找到第一个匹配后结束
    //str.match方法是截取匹配合适的字符串片段
    var reg = /ab/g;
    var str = "abababababab";
    //^第一个 即使有全局匹配,但是^代表匹配第一个
    var reg=/^a/g;
    var str1="abcdea";
    var str2="abcde\na";//加换行符也还是只要一个a

    //m多行匹配  换行匹配 上述例子加上多行匹配之后,就是两个a了
    var reg = /^a/gm;
    var str3 = "abcde\na";
  </script>
</body>

</html>

reg.test();只判断是否匹配

str.match();把匹配的选出来

 四:表达式

如何实现前面三位是数字,但不是固定的数字,是数字就行

 一个[]代表一位 里面填的就是取值区间

例一:

 var reg=/[1234567890][1234567890][1234567890]/;
   var str="1230u98723zpoicuyoiodfjh"

 

例二:

var reg=/[ab][cd][d]/;
   var str1="abcd";

 

例三:

//简便写法 
   var reg=/[0-9A-z]/;//从0-9,A-Z和a-z A的ASCII码是65 按照ASCII码排的

非,或用法

<!DOCTYPE html>
<html lang="en">

<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <meta http-equiv="X-UA-Compatible" content="ie=edge">
  <title>Document</title>
</head>

<body>
  <script>
    //^有两种用法
    //放在表达式里面代表非
    var reg=/[^a][^b]/g;//第一位不是a 第二位不是b
    var str="ab1cd";

    //或  要拿小括号写
    var reg=/(abc|bcd)[0-9]/g;

    
  </script>
</body>

</html>

 

五:元字符

<!DOCTYPE html>
<html lang="en">

<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <meta http-equiv="X-UA-Compatible" content="ie=edge">
  <title>Document</title>
</head>

<body>
  <script>
    //  world  \w===[0-9A-z_] 完全等于0-9 A-Z a-z 下划线
    //         \W===非w
    var reg = /\wcd2/g;
    var str = "b*cd2";

    //     \d===[0-9]
    //     \D===非d
    var reg = /\d\d\d/;
    var str = "123";

    //表达式里也可以写元字符
    var reg = /[\w\d]/;

    //    \s 空白字符 例如:空格,制表符,回车等等
    //    \S  非s

    //     \b===单词边界
    //      \B===非单词边界
    var str="abc ced fgh";//比如ac cd fh这六个就是单词边界
    var reg=/\bcde/g;//c是单词边界
     
     var reg=/\bcde\B/g;
     var str="abc cdesfgh";

     //unicode编码 可以匹配汉字 汉字转换成unicode编码
     var reg=/\u006a\u0073\u771f\u96be/;
     var str="js真难";
     //汉字也可以有范围  unicode编码也可以写区间
     var reg=/[\u3000-\ua000]/;
     var str="js真难";

     // .===匹配一切

    //以...结尾
    var reg=/ed$/g;//连着e,以d结尾
    var str="abcded";

    //检验一个字符串首尾是否含有数字(首或尾)
    var reg=/^\d|\d$/;//首或尾
    var str="123";

    //检验首和尾是否都含有数字
    var reg=/^\d[\s\S]*\d$/g;//[\s\S]*区间拉伸,区间含有的0-多个
    var str="123abc123";
      </script>
</body>

</html>

 

六:量词 

<!DOCTYPE html>
<html lang="en">

<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <meta http-equiv="X-UA-Compatible" content="ie=edge">
  <title>Document</title>
</head>

<body>
  <script>
    //n+  n可以出现1-无数次
    //n*   n 可以出现0-无数次
    var reg=/\d*/g;//可以出现0-无数次
    var str="abc";
    var str1=str.match(reg);console.log(str1);//Array(4) [ "", "", "", "" ],因为都识别为空,所以就匹配到光标移动位,都是空
    
    var reg=/\w+/g;
    var str="aaaaaaaa";//结果没有空,因为有匹配结果,正则表达式遵循贪婪匹配原则,能多则不少

    //n?  0-1
    var reg=/\w?/g;
    var str="aaaaaaaa";

    //n{X} {x}个
    var reg=/\w{3}/g;//每三个匹配
    var str="aaaaaaa";

    //n{x,y} {x,y}
    var reg=/\w{3,5}/g;
    var str="aaaaaaaaaaaaaaaaa";

    //n{x,正无穷}
    var reg=/\w{2,}/g;
    var  str="aaaaa";
   </script>
</body>

</html>

 

 

七:RegExp对象方法

<!DOCTYPE html>
<html lang="en">

<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <meta http-equiv="X-UA-Compatible" content="ie=edge">
  <title>Document</title>
</head>

<body>
  <script>
  // exec reg.exec();
  var reg=/ab/g;//加了g会一直匹配下去
  var str="abababab";
   console.log(reg.exec(str));//index代表匹配的位置  游标位置
   console.log(reg.lastIndex);//游标位置通过找游标位置来进行匹配
   console.log(reg.exec(str));
   console.log(reg.exec(str));
 
   //匹配4个连续一样的
   var str="aaaabbbb";
   var reg=/(\w)\1\1\1/g;//括号也是子表达式,括号会记住里面匹配的内容  \1是引用第一个子表达式匹配的内容
   
   //匹配aabb的形式
   var str="aabb";
   var reg=/(\w)\1(\w)\2/g;

   
   </script>
</body>

</html>

 

八:支持正则表达式的String对象的方法 

<!DOCTYPE html>
<html lang="en">

<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <meta http-equiv="X-UA-Compatible" content="ie=edge">
  <title>Document</title>
</head>

<body>
  <script>
    //match匹配出符合正则表达式的字符

    //search  返回匹配到的位置  匹配不到返回-1
    var str = "edbaabb";
    var reg = /(\w)\1(\w)\2/g;
    console.log(str.search(reg));

    //replace 替换
    var str = "aa";
    console.log(str.replace("a", "b")) //ba,只换了第一个,用正则表达式并写上g就能全部替换

    //把aabb的字符串都倒过来,变成bbaa
    var reg = /(\w)\1(\w)\2/g;
    var str = "aabb";
    console.log(str.replace(reg, "$2$2$1$1")); //一个$代表一个子表达式

    //   var reg=/(\w)\1(\w)\2/g;
    var str = "aabb";
    console.log(str.replace(reg, function ($, $1,
    $2) { //传参 第一个参数传的是正则表达式的结果,第二个参数是第一个子表达式匹配的内容,第三个参数是第二个子表达式匹配的内容,符号都可以,自己定
      return $2 + $2 + $1 + $1 + $1 + "abc";
    }));
    

    //如何将the-first-name变成theFirstName
    var reg=/-\w/g;//-f -g匹配到
    var str="the-first-name";
    console.log(str.replace(reg,function($,$1){//reg找了两次,function运行两次
      return $1.toUpperCase();
    }));

    //正向预查,正向断言 匹配任何其后紧接指定字符串n的字符串
     var str="abaaaaa";
     var reg=/a(?=b)/g;//匹配后面跟着b的a
     //非 匹配任何其后不紧接指定字符串n的字符串
     var str="abaaaaa";
     var reg=/a(?!b)/g;

     //去重
  var str="aaaaaaaaabbbbcccc";
  var reg=/(\w)\1*/g;//1*后向引用1个或者多个
  console.log(str.replace(reg,"$1"));
  </script>
</body>

</html>

匹配符号:

<!DOCTYPE html>
<html lang="en">

<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <meta http-equiv="X-UA-Compatible" content="ie=edge">
  <title>Document</title>
</head>

<body>
  <script>
    var str="aa?aaaa";
    var reg=/\?/g;

    var str="aa//aaaa";
    var reg=/\//g;

    

  </script>
</body>

</html>

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值