山水沐光 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));
下面我们来定义一个正则表达式来匹配一个邮箱格式的字符串,我们先来确定一下邮箱的格式:
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>
在实际项目中,我们通常会用插件去实现字符串验证的功能。所以,大家了解了正则表达式基本语法之后,再去学习那些深度的东西