1、正则表达式概述
- 什么是正则表达式
正则表达式,Regular Expression,是一种字符串匹配模式,是由元字符或限定符组成的一个式子,用来检索、替换符合某个模式的文本。 - 组成
正则表达式由普通字符和特殊字符(元字符)组成。 - 作用
字符串匹配:给定的字符串是否符合正则表达式的过滤逻辑;
字符串提取:从字符串中获取我们想要的特定部分,如提取邮箱信息、手机号码等
字符串替换:替换字符串中的敏感词等
2、元字符
2.1 常用元字符
常用的元字符:
. 表示除了\n以外的任意一个字符
[] 表示范围
[0,9] 表示0到9之间的任意一个数字
[a-z] 表示所有的小写字母中的任意一个
[A-Z] 表示所有的大写字母中的任意一个
[a-zA-Z] 表示所有的字母中的任意一个,包括大写字母和小写字母
特别地,[]可以表示去掉元字符的特殊含义,如[.]就代表一个.
| 表示或者
如:[0-9]|[a-zA-Z] 表示数字或字母中的一个
() 表示分组,提升优先级
如:([0-9])([a-z])([1-5]) 从左边开始计算,分三组
\d 表示数字中的一个
\D 表示非数字
\s 表示空白符中的一个
\S 表示非空白符
\w 表示非特殊字符
\W 表示特殊字符
\b 表示单词的边界
2.2 限定符
表达次数的元字符,也称为限定符,用于限定前面的元素出现的次数
* 表示前面的表达式出现了0次或多次,即任意次
如:[a-z][0-9]* 表示小写字母中的任意一个,后面要么有数字,要么没有数字
+ 表示前面的表达式出现了一次或多次,即至少出现一次
如:[a-z][9]+ 表示小写字母中的任意一个,后面至少有一个9或有多个9
? 表示前面的表达式出现了0次或1次,另一层含义是:阻止贪婪模式
如:[4][a-z]?
{} 用于明确指出元素出现的次数
如:
{0,} 表示前面的表达式出现了0次或多次,等价于 *
{1,} 表示前面的表达式出现了1次或多次,等价于 +
{0,1} 表示前面的表达式出现了0次或1次,等价于 ?
{5,10} 表示前面的表达式出现了5到10次
{5} 表示前面的表达式出现了5次
^ 表示字符串以什么开头,也可以表示取反
如:
^[0-9] 表示以数字开头
[^0-9] 表示非数字
$ 表示字符串以什么结尾
如:
[0-9][a-z]$ 表示字符串以小写字母结尾
3、JavaScript中正则表达式的使用
3.1 创建正则表达式对象
var reg = /\d{1,5}/;
var result = reg.test("hello1, world2! ");
console.log(result);
var regObj = new RegExp(/\d{1,5}/);
var ret = regObj.test("hello3, world6! ");
console.log(ret);
3.2 常用正则表达式
if (/^[\u4e00-\u9fa5]{2,6}$/.test(pwd)){}
if (/\d/.test(pwd)){}
if (/[a-zA-Z]/.test(pwd)){}
if (/[^0-9a-zA-Z]/.test(pwd)){}
if (/^[0-9a-zA-Z_.-]+[@][0-9a-zA-Z_.-]+([.][a-zA-Z]+){1,2}$/.test(email)){}
3.3 匹配模式
var str = "中国移动:10086;中国联通:10010;中国电信:10000;";
var array = str.match(/\d{5}/g);
console.log(array);
3.4 分组提取
var dateStr = "2021-07-25";
var dateArray = dateStr.match(/(\d{4})[-](\d{2})[-](\d{2})/g);
console.log(RegExp.$3);
var email = "giserDev@163.com.cn";
var emailArray = email.match(/([a-zA-Z0-9_.-]+)[@]([a-zA-Z0-9_-]+)([a-zA-Z_.-]+)/);
console.log(RegExp.$1);
console.log(RegExp.$2);
console.log(RegExp.$3);
3.5 大小写处理
var str = "HdhhdH";
var str = str.replace(/h/ig, "f");
console.log(str);
3.4 exec的使用
var str = "中国移动:10086;中国联通:10010;中国电信:10000;";
var reg = /\d{5}/g;
var matchStr = null;
while (matchStr = reg.exec(str)){
console.log(matchStr[0]);
}