【融职教育】Web前端学习 第3章 JavaScript基础教程10 正则表达式

山水沐光 2020-06-16

一、正则表达式概述

正则表达式用于匹配字符串,例如我们想验证某一个字符串是否为邮箱格式,可以使用正则表达式判断;我们希望特换一片文章中的所有英文字母,可以使用正则表达式;我们想截取一片文章中的某些内容,也可以使用正则表达式。

正则表达式对象RegExp是JavaScript中的内置对象,我们可以像创建数组一样创建它。

1 var arr = new Array();   //创建数组
2 var reg = new RegExp();  //创建正则表达式

在开发中,我们一般用简写的方法创建正则表达式,同样和数组比较,代码如下

1 var arr = [1,2,3];   //创建数组
2 var reg = /123/;     //创建正则表达式

二、正则表达式语法

正则表达式可以用来匹配字符串,我们可以把正则表达式看做是一种规则,如果字符串中的内容符合这种规则,就会匹配,如果不符合这个规则,就不会匹配

1 var reg = /123/;  //创建了一个正则表达式,这个正则表达式可以匹配字符串"123"
2 var str = "123";  //创建字符串"123"
3 console.log(reg.test(str));  //test方法可以测试字符串是否成功匹配,匹配返回true,不匹配返回false

我们可以看到程序在控制台输出了true,因为reg定义的时候就是为了匹配字符串123的,我们再来看下面的例子

1 var reg = /123/;
2 var str = "012345";
3 console.log(reg.test(str));  //仍然返回true

我们将字符串改成了"12345",返回结果仍然返回true,这是因为我们定义的正则表达式可以匹配任何包含"123"的字符串,为了证实这个说法,我们可以使用exec方法来输出匹配的内容

1 var reg = /123/;
2 var str = "012345";
3 console.log(reg.exec(str)); //exec方法返回一个数组,数组中包含匹配的内容,如果未匹配,返回null

这段代码在控制台输出了一个数组,数组的第一个元素是匹配的内容,大家可以看到匹配的内容是"123",数组还带有两个属性,index表示从字符串中第几个字母开始匹配,input表示匹配的字符串的值。

有的时候,我们希望我们写的正则表达式只能匹配"123",如果是字符串包含"123"页不匹配,如果希望这样的话,我们需要改进我们的正则表达式

1 var reg = /^123$/;  //^表示开头,$表示结尾,两个符号之间是匹配的内容
2 var str = "012345";
3 console.log(reg.exec(str));

这样就可以只能匹配字符串"123",但是如果正则表达式是直接把要匹配的内容写在正则表达式里,那意义也不是很大,接下来我们用正则表达式强大的语法来匹配各种字符串。

设定匹配范围

正则表达式可以通过[]设定匹配的范围,代码如下

1 var reg = /[123]/;  //匹配123中的任意一个字符
2 var str = "02468";  
3 console.log(reg.exec(str));

通过指定范围,正则表达式成功匹配了字符串中的数字2。

匹配数字

正则表达式可以在匹配范围中定义[0-9]来设定匹配数字

1 var reg = /[0-9]/;  //匹配一位数字
2 var str = "02468";  
3 console.log(reg.exec(str));

虽然字符串中都是数字,但是一个[]只能表示匹配一位数字,所以这里匹配的是0

匹配字母

正则表达式可以在匹配范围中定义[a-z]来设定匹配字母

1 var reg = /[a-z]/;  //匹配一位字母
2 var str = "012345abcde";  
3 console.log(reg.exec(str));

与匹配数字类似,上面的正则表达式可以匹配一位字母。

匹配多位

上面的匹配内容匹配的都是一位数字或字母,我们可以通过+来指定匹配多位

1 var reg = /[a-z]+/;  //匹配多位字母
2 var str = "012345abcde";  
3 console.log(reg.exec(str));

上面的代码表示匹配多位字母,所有abcde都成功的被匹配

匹配指定位数

有的时候我们需要匹配指定位数的字符,可以通过{}指定匹配的位数

1 var reg = /[a-z]{3}/;  //匹配3位字母
2 var str = "012345abcde";  
3 console.log(reg.exec(str));

下面我们来定义一个正则表达式来匹配一个邮箱格式的字符串,我们先来确定一下邮箱的格式:

  • 5~12位的数字字母下划线开头
  • 后面接@
  • 后面接2~5位的数字和字母
  • 后面接.
  • 后面接com
1 var reg = /^[a-zA-Z0-9\_]{5,12}\@[a-zA-Z0-9]{2,5}\.com$/; 
2 var str = "";    //邮箱  
3 console.log(reg.exec(str));

很多特殊符号在正则表达式都有特殊含义,为了取消它的特殊含义,我们需要在特殊符号之前加“\”将其转义。、

三、表单验证

通过上面的学习,我们已经对正则表达式有了初步的了解,下面我们来实现一个表单验证邮箱的功能,验证通过或者不通过,都要在文本框后面输出结果

<input type="text">
<span></span>
<script>
    var input = document.querySelector("input");
    var span = document.querySelector("span");
    var reg = /^[a-zA-Z0-9\_]{5,12}\@[a-zA-Z0-9]{2,5}\.com$/; 
    input.onblur = function(){
        if(reg.test(this.value)){
            span.innerHTML = "验证通过";
        }else{
            span.innerHTML = "验证失败";
        }
    }
</script>

四、总结

在实际项目中,我们通常会用插件去实现字符串验证的功能。所以,大家了解了正则表达式基本语法之后,再去学习那些深度的东西

课后练习

  1. 使用正则表达式,完成手机号验证;
  2. 使用正则表达式,完成邮箱验证;

【融职教育】在工作中学习,在学习中工作

相关推荐