正则表达式
regular expression:RegExp
用来处理字符串的规则
- 只能处理字符串
- 它是一个规则:可以验证字符串是否符合某个规则(test),也可以把字符串中符合规则的内容捕获到(exec / match…)
编写正则表达式
创建方式有两种:
字面量
构造函数
//=>字面量创建方式(两个斜杠之间包起来的,都是用来描述规则的元字符)
let reg1 = /\d+/g;
//=>构造函数模式创建 两个参数:元字符字符串,修饰符字符串
//=>构造函数因为传递的是字符串,\需要写两个才代表斜杠
let reg2 = new RegExp("\\d+","g");
字面量和构造函数创建的区别:
构造函数创建的正则表达式可以使用变量,比较灵活
let type = "aaa";
//这种情况只能使用构造函数方式(因为它传递的规则是字符串,只有这样才能进行字符串拼接)
reg = new RegExp("^@" + type + "@$");
console.log(reg.test("@aaa@")); //=>true
console.log(reg.test("@aaaa@")); //=>false
总结:
如果想把一个变量的值作为正则元字符的一部分,只能通过构造函数的方式创建正则
正则表达式由两部分组成:
元字符
修饰符
常用元字符:
1.量词元字符,设置出现的次数
* 零到多次
+ 一到多次
? 零次或者一次
{
n} 出现n次
{
n,} 出现n到多次
{
n,m} 出现n到多次
2.特殊元字符,单个或者组合在一起代表特殊的含义
\ 转义字符
. 除\n(换行符)以外的任意字符
^ 以哪一个元字符作为开始
let reg=/^\d/
console.log(res.test("fDGng")) //false
console.log(res.test("2019SFfe")) //true
console.log(res.test("egswb2019")) //false
$ 以哪一个元字符作为结束
let reg=/\d$/
console.log(res.test("frdres")) //false
console.log(res.test("2019sesefe")) //false
console.log(res.test("wfasg2019")) //true
\n 组合元字符,表示换行,\把n转译成了换行符
\d 0-9之间的数字
\D 非0-9之间的数字(大写和小写的意思是相反的)
\w 数字,字母,下划线中的任意一个字符
\W 除所有字母,数组,下划线外的字符(大写和小写的意思是相反的)
\s 一个空白字符(包含空格,制表符,换页符等)=[\r\n\t\v\f]
\S 匹配非空格的字符(大写和小写的意思是相反的)
\t 一个制表符(一个TAB键,四个空格)
\b 匹配一个单词的边界
\B 匹配一个非单词的边界
\n 匹配一个换行符
\r 匹配一个回车符
x|y x或者y中的一个字符
[xyz] x或者y或者z中的一个字符
[^xy] 除了x/y以外的任意字符
[a-z] 指定a-z这个范围中的任意字符 [0-9a-zA-Z_]===\w
[^a-z] 非a-z这个范围中的任意字符
[\u4E00-\u9FA5] 汉字范围
() 正则中的分组符号
(?:) 只匹配不捕获,不让他捕获该子表达式(match,matchAll)
let reg = /(?:b)(c)/
let str = "abcabc"
console.log(str.match(reg)) //["bc", "c"]
console.log(...str.matchAll(reg))//["bc", "c"]
(?=) 正向预查,表示匹配后面紧挨着的字符的字符串
(?!) 反向预查,表示匹配后面不是该字符的字符串
let str = "abcacb"
let reg1 = /a(?=b)/g //匹配a后面紧挨着是b的字符串
let reg2 = /c(?!b)/g //匹配c后面不是b的字符串
console.log(str.match(reg1)) //["a"]
console.log(str.match(reg2)) //["c"]
(?<=pattern)xxx 反向预查,表示匹配紧跟pattern后面的xxx
^$和转义字符\详解:
let reg=/\d+/ //^,$都不加,表示字符串包含符合规则的内容即可
let reg=/^\d+$/ //^,$都加,表示字符串只能是和规则一致的内容
-------------------------------------------------------------------------------------------
let reg=/^2.3$/
console.log(reg.test("2f3")) //true
console.log(reg.test("2.3")) //true
console.log(reg.test("23")) //false
console.log(reg.test("2fsef3")) //false
------