正则表达式

正则表达式

什么是正则表达式

正则表达式用于匹配字符串中字符组合的模式。在JavaScript中,正则表达式也是对象

正则表达式作用

  1. 表单验证:匹配我们想要的字符串和文本
  2. 过滤敏感词并且替换。
  3. 输入关键词,根据关键词提取相关的内容显示。

正则表达式特点

优点

  1. 灵活,逻辑性,功能性强。
  2. 可以迅速并且简单得到字符串控制

缺点:

  1. 有点复杂。可以直接复制,但是要修改。

创建正则表达式

  1. 调用RegExp对象的构造函数创建
  2. 利用字面量创建
        //1.调用RegExp对象的构造函数创建
        var str1=new RegExp(/123/);
        console.log(reg);
        //2.利用字面量创建
        var str2=/123/;

测试正则表达式

  • 检测字符串是否符合正则表达式用test()。返回true或者false。其参数是测试字符串。
  • 只要含有字符串123,就是true,如1123,111233。
regexObj.text(str)
        var str2=/123/;
        console.log(str2.test(123));
  1. regexObj是正则表达式
  2. str是我们要检测的文本
  3. 检测str文本是否符合正则表达式规范

正则表达式组成

组成:正则表达式可以由简单的字符构成,如/abc/,也可以是简单特殊的字符组合。比如/ab*c/。其中特殊字符也被称为元字符,在正则表达式具有特殊意义的专用符号,如^、$、+

边界符^和$

/^abc/

必须以abc开头才为false

     <script>
        var str=/^abc/;
        console.log(str.test('abc'));//true
        console.log(str.test('abcd'));//true
        console.log(str.test('aabcd'));//false
    </script>

/^abc$/

必须以abc开头,abc结尾。则这个字符串必须为abc。

/[abc]/

只要包含abc中的一个字符就返true。

/^ [abc] $ /

表示只有输入a或者输入b或者输入c才返回true。
输入aa返回true。

/ ^ [a-z] $ /

输入26个小写字母任意一个都返回true
输入a、z返回true

 / ^ [a-zA-Z] $ /

输入任意1个大写或者小写字母都返回true。

/ ^ [a-zA-Z0-9_-] $ /

输入小写字符,大写字母,0-9,-,_。都返回true。
多选一,长度为1才可以。

 / ^ [^a-zA-Z0-9_-] $ /

中括里面,表示取反。表示这些符号都不能包含。输入这些都返回false。

/^[a-zA-Z0-9_-]{6,16}$/;

表示可以输入字符数组下划线。且长度在6和16之间。
注意:{6,16}之间不能有空格

总结:

  • 中括号外^表示边界符,中括号内表示取反。
  • [ ]表示多选一。

量词符

  • /^a*$/ 表示任意次a都可以,包括0次
  • /^a+$/ 表示任意次a都可以,不包括0次
  • /^a?$/ 表示只有出现0次或者1次a返回true
  • /^a{3}$/ 表示只有恰好出现3次a返回true
  • /^a{3,}$/ 表示出现大于等于3次a出现true
  • /^a{3,14}$/ 表示在3和14之间个a返回true
     <script>
        var str=/^a*$/;
        console.log(str.test(''));//true
        console.log(str.test('a'));//true
        console.log(str.test('aaa'));//true
        var str=/^a+$/
        console.log(str.test(''));//false
        console.log(str.test('a'));//true
        console.log(str.test('aaa'));//true
        var str=/^a?$/
        console.log(str.test(''));//true
        console.log(str.test('a'));//true
        console.log(str.test('aaa'));//false
        var str=/^a{3}$/
        console.log(str.test(''));//false
        console.log(str.test('a'));//false
        console.log(str.test('aaa'));//true
        var str=/^a{3,}$/
        console.log(str.test(''));//false
        console.log(str.test('aaaa'));//true
        console.log(str.test('aaa'));//true
        var str=/^a{3,14}$/
    </script>

案列

表单验证。当输入数字字母下划线并且长度在6和16之间时,输出正确的并变为绿色。

在这里插入图片描述

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <style>
      span{
        color:#aaa;
        font-size: 14px;
      }
      .right {
        color: green;
      }
      .wrong{
        color: red;
      }
    </style>
</head>
<body>
    <input type="text" class="uname"> <span>请输入用户名</span>
      <script>
          var str= /^[a-zA-Z0-9_-]{6,16}$/;
          var uname=document.querySelector('.uname');
          var span=document.querySelector('span');
          //失去焦点
          uname.onblur=function(){
            if(str.test(this.value)){
              console.log('正确的');
              span.className='right';
              span.innerHTML='用户名格式正确';
            }else{
              console.log('错误的');
              span.className='wrong';
              span.innerHTML='用户名格式正确';
            }
          }
      </script>
</body>
</html>

括号总结

在线测试网站:c.runoob.com

      <script>
        //a||b||c
        var str=/^[abc]$/;
        //只让c重复三次 abccc
        var str=/^abc{3}$/;
        //让abc重复三次 abcabcabc
        var str=/^(abc){3}$/
      </script>

预定义类

\d:只要是数字就可以。
^\d$:只能一位数字。
\D:匹配非数字,位数不限。
\w:匹配任意字母、数字、下划线。
\W:除了字母数字下划线。
\s:匹配空格
\S:匹配非空格
都是[ ],只有一个。

验证号码 010-12345678或者0530-12345678

/^\d{3}$-\d{8}|\d{4}-\d{7}$/;
//==============================
/^\d{3,4}$-\d{7,8}$/;

正则表达式替换

把red替换为baby
只替换第一个符合条件的。

      <script>
        //1.替换replace
        var str='andy和red'
        var newstr=str.replace('andy','baby');
        console.log(newstr)
        //2.用正则表达式
        var newstr=str.replace(/andy/,'baby');
      </script>

/表达式/[switch]

switch(也称为修饰符)按照什么模式匹配

  • g:全局匹配
  • i:忽略大小写
  • gi:忽略大小写并且全局匹配

案列

把哈哈和hh替换成**

在这里插入图片描述

<body>
      <textarea name="" id="message" cols="30" rows="10"></textarea><button>提交</button>
      <div></div>
      <script>
         var text=document.querySelector('textarea');
         var btn=document.querySelector('button');
         var div=document.querySelector('div');
         btn.onclick=function(){
            div.innerHTML=text.value.replace(/哈哈|hh/g,'**');
         }
      </script>
</body>

版权声明:本文为qq_42964711原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。