有关正则

在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的位置开始

发布了9 篇原创文章 · 获赞 41 · 访问量 3286

猜你喜欢

转载自blog.csdn.net/ephemeral0/article/details/104720877