在js这门语言中,正则算是一个特例了,可以说它算是语义化中的一个不听话的孩子,所以很多人对正则比较头疼,但其实只要用心就会发现其实他也很可爱,今天我们就来总结一下有关正则的用法。
首先让我们来认识一下正则吧:
1、正则的概念:
正则可以理解为字符的正则的规则,所以说,正则使用来操作字符串的
而使用正则可以使数据校验的工作量大大减轻,但要注意极简原则,常用在:网址、邮箱、身份证号、手机号等。
2、正则的创建方式:
1、字面量的创建:
var reg = /a/
2、构造函数的创建:
var reg = new RegExp("a",);
3、正则对字符串提供的三大功能
1、验证: reg.test(str)
返回一个布尔值,表示当前模式是否能匹配参数字符串。
var reg = new RegExp("hello");
console.log(reg.test("hello world"))
// 上面代码验证参数字符串之中是否包含hello,结果返回true。
友情提示:
1、在使用正则的test方法做验证时,除非特殊要求,一般都是要加上开头和结尾 ,表示整体验证。不使用全局g。
2、在使用除了test方法做查找或匹配替换操作符时,一般使用全局g找到所有内容,而不是用开头^和结尾$。
若看不懂友情提醒请继续向下看哦,最后都会有补充的
2、查询: str.search(reg) / str.match(reg)
用于检索字符串中的正则表达式的匹配。返回一个数组,其中存放匹配的结果。如果未找到匹配,则返回值为null。
var str = "abc123bbc2423cbc234134";
console.log(str.match(/bc/));
3、替换: str.replace(reg,newStr);
是指按照给定的正则表达式进行替换,返回替换后的字符串。字符串对象的replace方法可以替换匹配的值。它接受两个参数,第一个是正则表达式,表示搜索模式,第二个是替换的内容。
var str = "@#$%^& .!@#$%^&*(_123sdf123!@#";
console.log(str.replace(/./,"啊"));
他的结果如下
4、相关字符用法
是不是很好奇我的正则里写的是什么,好,现在我们就开始介绍元字符,也就是这些有特殊含义的符号,大体有以下几种
1、通配符:.
写法就是我上一个例子呦
2、转义符:
如console.log(str.replace(/\./,"啊"));
3、空白符:\s
如console.log(str.replace(/\s/,"啊"));
下面就不举例了,因为写法都一样
4、数字:\d
5、非数字:\D
6、 数字字母下划线:\w
7、 非数字字母下划线:\W
除了元字符以外,在正则中还有一种常用的,我们称之为限定符
限定符:量词:表示数量,量词的前一个匹配单位连续出现的次数
下面我们来几个具体的例子,如
默认匹配1个
console.log(str.replace(/\d/,"啊"));
固定次数:2
console.log(str.replace(/\d{2}/,"啊"));
指定范围:2~4
console.log(str.replace(/\d{2,4}/,"啊"));
指定范围:2~正无穷
console.log(str.replace(/\d{2,}/,"啊"));
指定范围:1~正无穷
console.log(str.replace(/\d+/,"啊"));
紧接着就是边界符啦
^:表示正则的开头
$:表示正则的结尾
边界符是限定字符串的开始和结束的
还有一些什么特殊字符呢
最后的最后,就是标示符了
5、正则的实际应用举例:
①字符串首尾去空格:
var reg = /^(https?:\/\/)?([0-9a-z]{1,10}\.)?[0-9a-z]{2,9}(\.[a-z]{2,4}){1,2}$/;
②文件格式监测:
var reg = /^.+\.(jpeg|png|gif|jpg)$/
③用户名监测(规则数字、字母、下划线、中划线组成,2-12位):
var reg = /^[a-z0-9_-]{2,12}$/
6、正则的补充
let str1 = '1234aBx5654dgr32133';
let reg = /[a-z]+/ig;
let reg2 = /\d+/g
// str.match 常用方法
console.log(str1.match(reg));
//["aBx", "dgr"]
//若想要每个字母都是一个单独的字符,把正则中的+去掉,因为+代表出现至少1次
console.log(str1.match(reg2)); //["1234", "5654", "32133"]
//reg.exec(str) 不常用 原理见下
console.log(reg.exec(str1)); //['aBx']
console.log(reg.lastIndex); //7
console.log(reg.exec(str1)); //['dgr']
console.log(reg.lastIndex); //14
reg.lastIndex = 0;
console.log(reg.exec(str1)); //['aBx']
console.log(reg.lastIndex); //7
exec一次只能返回一个查询结果。多次执行,继续向后查询,查询到最后,没有符合正则的字符,返回null,再下一次从头开始查询
原理:每次查询都存在一个查询结束后的索引reg.lastIndex,可以查看,可以修改
exec的每次查询的开始位置都是从lastIndex的位置开始