正则表达式由浅入深 梳理总结(持续更新)
这里写目录标题
1.正则表达式基础
概述
概念: 正则表达式是一种[字符串检索模式]
原理: 通过参数字符串设置检索规则,在指定字符串中检索出符合规则的字符串
作用: 可以用来进行各种字符串格式验证(邮箱验证,地址验证,手机号验证等),或进行文本替换
基本语法: /正则表达式/修饰符(可选)
基础实例: var reg = /abc/i;
此为一个基础正则表达式,abc为表达式主体,即要检索的内容,i是正则表达式的修饰符,表示检索时不区分大小写
本质: 当我们对正则表达式进行console.log(typeof reg)
时,打印为Object
,可知其表现为一个字符串的样子,但是其本质是对象类型.
常用方法( search() , replace() , match() )
(1)search 方法: 用于检索字符串中指定的子字符串,或检索与正则表达式相匹配的子字符串,并返回子串的起始位置。
----如果无法找到则返回 -1
----例:
var reg = /abc/i ;
var str = '12345abcdefg';
var str1 = '123456ab'
var index = str.search(reg);
var index1 = str1.search(reg)
console.log(index); // 5
console.log(index1); // -1
(2)replace 方法: 用于在字符串中用一些字符替换另一些字符,或替换一个与正则表达式匹配的子串。
----例:
var reg = /abc/i ;
var str = '12345abcdefg';
var newStr = str.replace(reg , 'xxx');
console.log(newStr); // 12345xxxdefg
console.log(str); // 12345abcdefg
可见正则表达式匹配的abc已经替换为xxx并将结果存入 newStr 中,且原字符串str未改变
(3)match 方法: 返回符合匹配规则的字符串的信息
----若不是全局匹配则返回的第一次匹配成功的信息
----若为全局匹配则返回所有匹配成功的子字符串数组
----若匹配失败则返回null
----例:
var reg = /abc/i ;
var reg1 = /abc/ig ;//增加全局搜索修饰符 g
var reg2 = /ac/i ;
var str = '12345abcdefgabc123';
var info = str.match(reg);
var info1 = str.match(reg1);
var info2 = str.match(reg2);
console.log(info); // ["abc",index: 5,input: "12345abcdefgabc123", groups: undefined]
console.log(info1); // ["abc","abc"]
console.log(info2); // null
2.正则表达式进阶
修饰符( i , g , m )
定义: 修饰符是正则表达式进行字符串检索时检索规则的制定者之一,其规定了正则应该按照哪种方式进行检索
常见修饰符: i , g , m
修饰符i : 检索匹配时不区分大小写。
var reg = /abc/ ;
var reg1 = /abc/i ;
var str = '12345ABC';
var info = str.match(reg);
var info1 = str.match(reg1);
console.log(info); // null 区分大小写匹配失败
console.log(info1); // ["ABC", index: 5; input:"12345ABC", groups: undefined] 增加i修饰符不区分大小写匹配成功
修饰符g : 进行全局检索匹配(查找所有匹配而非在找到第一个匹配后停止)。
var reg = /abc/ ;
var reg1 = /abc/g ;
var str = '123abc123abc123abc';
var info = str.match(reg);
var info1 = str.match(reg1);
console.log(info); // ["abc",index: 3, input:"123abc123abc123abc", groups: undefined] 未进行全局匹配,只返回第一次匹配成功"abc"信息
console.log(info1); // ["abc","abc","abc"] 全局匹配成功返回三次成功匹配abc
修饰符m : 进行换行匹配。(不常用,暂不梳理)
检索模式( 表达式模式 , 元字符模式 , 量词模式 )
正则表达式的检索模式,用于指定正则表达式的主体采用何种方式进行内容的检索,常见的有表达式模式,元字符模式,量词模式三种,相互之间可配合使用。
(1)表达式模式
常见类型: [abc] , [0-9] , (a|b)
[abc]类型 : 表示只要符合中括号中的任意字符均可满足匹配条件。
[0-9]或[a-z]类型 : 表示只要符合中括号中的0到9范围内任意数值或a到z任意字符即可满足匹配条件。
(a|b)类型 : 表示满足小括号中以|号分割的任意一个条件即满足。
----例: 若想匹配a或者c都可,则使用[ac],一个中括号[]表示一个匹配字符,只要存在于中括号中的字符,即满足。
var reg = /[ac]/g ;
var str = '123a23c234b234c' ;
console.log(str.replace(reg , 'x')) //123x23c234b234c 可见凡是a或者c都替换为了x
----例: 若两个或多个中括号连续使用则表示连续满足两个或多个中括号中的字符。
var reg = /[ac][23]/g ;
var str = '123a23c234b234c' ;
console.log(str.replace(reg , 'Y')) //123Y3Y34b234c 只有同时满足a或c且下一个是2或3的才替换为Y
----例: 若想匹配0到9的任意数值或者a-z的任意字符则使用[0-9]或[a-z]。
var reg = /[0-9]/g ;
var str = '12345abcde123abc' ;
console.log(str.replace(reg , 'X')) //XXXXXabcdeXXXabc
var reg = /[a-z]/g ;
var str = '12345abcde123abc' ;
console.log(str.replace(reg , 'Y')) //12345YYYYY123YYY
----例: 若想匹配字符串符合’ac’或者’23’的则使用(ac|23)。
var reg = /(ac|23)/g ;
var str = '12345acde123abc' ;
console.log(str.replace(reg , 'Y')) //1Y45Yde1Yabc
(2)元字符模式
具有特殊含义的字符称为元字符,通过元字符来进行检索匹配则称为元字符模式。
常见类型:\w , \d , \s , \b , ^ , $ 更多类型请查阅网上相关的详细文档
\w : 代表数字或字母或下划线规则的字符(\W则为转移表示匹配非\w规则的字符)
\d : 代表数字规则的字符(\D则为转移表示匹配非\d规则的字符)
\s : 代表空白规则的字符(\S则为转移表示匹配非\s规则的字符)
\b : 代表单词边界规则的字符(\B则为转移表示匹配非\b规则的字符)
^ : 代表字符串的开始位置
$ : 代表字符串的结束位置
(3)量词模式
表示要检索的字符或者字符串出现的次数的词组称为量词,使用量词的模式称为量词模式。
常见类型: * , + , ?
* : 代表匹配前面的子表达式规则零次或多次
+ : 代表匹配前面的子表达式规则一次或多次
? : 代表匹配前面的子表达式规则零次或一次