正则表达式:
作用:
1)验证某个字符串是否符合某个规则 验证
2)从一个字符串中获取符合某个规则的子串 捕获
语法:
正则也是表达式,在这个表达式使用了特定的符号,我们需要学习一堆的符号
创建正则有两种方式:
1)字面量创建 let reg = /abc/;
不能进行拼接
写元字符时 \x
2)使用new的形式创建正则 let reg = new RegExp("hello");
能进行拼接
写元字符时 \\x
正则表达式中有两个核心方法:
1)test 验证 验证我们的字符串是否符合正则表达式这个规则
语法:reg.test(你要检测的字符串);
返回值:一个是布尔类型 true符合规则 false不符合规则
2)exec 捕获 从一个字符串中获取符合我们规则的一个字串
语法:reg.exec(你要捕获的字符串);
返回值:
null:如果我要捕获的字符串在原始字符串中没有出现,那么返回null
数组:[0] 就是捕获到的片段
不管你有多个少片段,都是是捕获第一个片段
不管你捕获多少次,也都是捕获第一个片段
.....
正则的贪婪性和非贪婪性:
贪婪性:
当我们给一个符号使用限定符的时,在捕获时,他会尽可能多的捕获
内容,我们叫这个特性为贪婪性。
非贪婪性:
如何把贪婪性变成非贪婪性,所谓的非贪婪性,就是指尽可能少的捕获。
在写限定符时,在后面加一个? 就会把贪婪性变成非贪婪性
正则中与字符串操作相关的方法:
1)search
语法:
str.search("子串")
str.search(正则表达式)
返回值:
返回找到子串对应的索引
如果找不到,找回-1
2)replace
语法:
str.replace(字符串,要替换的内容)
str.replace(正则表达式,要替换的内容)
返回值:
只能返回第1相查找到的内容,返回替换好的字符串
如果你想进行全局替换,需要加上一个g,g就表示全局替换
3)match
语法:
str.match(字符串)
str.search(正则表达式)
返回值:
捕获到一个代码片段,返回格式和exec一模样
如果你想进行全局捕获,需要加上一个g
正则表达式的标识符:
是写在正则表达式的外面,是用来修饰整个正则表达式的
常用的有三个:
1) i 忽略大小写
2) g 全局匹配
如果不加g 每一次捕获只会捕获第1个
加了g,第1次捕获,捕获第1个,第2次捕获,就会捕获第2个....
如果捕获不到,返回null
3)y 粘性全局
语法:/abc/igy
小练习
1)基础元字符
元字符 | 注释 |
---|---|
\s | 表示一个空格 |
\S | 表示一个非空格 |
\t | 表示一个制表符(Tab) |
\d | 表示一个数字 |
\D | 表示一个非数字 |
\w | 表示一个 数字字母下划线 表示 数字 字母 下划线 三选一就OK |
\W | 表示一个 非 数字字母下划线 表示 数字 字母 下划线 以外的任意字符就OK |
. (点) | 表示非换行的任意字符 |
\ | 表示转义 就是转变原来的意思 n 表示字母n \n 就表示换行 |
2)边界元字符
元字符 | 注释 |
---|---|
^ | 表示字符串的开始 |
$ | 表示字符串的结束 |
^\d | 以数字打头 |
\d$ | 以数字结束 |
^\d$ | 以数字打头 以数字结尾 |
3)限定元字符
元字符 | 注释 |
---|---|
* | 表示出现0~到多次 |
+ | 表示出现1~到多次 |
? | 表示出现0次或1次 |
{n} | 表示出现n次 |
{n,} | 表示出现n次或多次 |
{0, } | 等价于 * |
{1, } | 等价于 + |
{n,m } | 表示出现n次到m次 |
{ 0, 1 } | 等价于 ? |
4)特殊符号
元字符 | 注释 |
---|---|
() | 表示一个整体;单独捕获 |
(?:) | 整体匹配,但是不捕获,只是标识一个整体,但是捕获时并不会单独捕获出来 |
I | 表示或,大部分情况下,它会和()连用,表示一个整体 |
[] | 表示里面的任意一个字符都可以 ;等价于 \s |
[^] | 表示里面的任意一个都不行;等价于 \S |
- | 表示 到 从如个字符到哪个字符 前提是它的在ASCII码中是连着的 |
[0-9a-zA-Z_] | 等价于 \w |
[^0-9a-zA-Z_] | 等价于 \W |
[0-9] | 等价于 \d |
[^0-9] | 等价于 \D |
5)正则表达式的标识符
语法 | 注释 |
---|---|
i | 忽略大小写 |
g | 全局匹配;加了g,第1次捕获,捕获第1个,第2次捕获,就会捕获第2个…如果捕获不到,返回null |
y | 粘性全局 |
6)正则表达式的标识符
语法 | 注释 |
---|---|
?= | 正向肯定预查 (当我们去捕获一个内容时,后面必须跟着我们选择的一个内容才行) |
?! | 正向否定预查 (当我们去捕获一个内容时,后面必须跟着不是我们选择的一个内容才行) |
?<= | 负向肯定预查(当我们去捕获一个内容时,前面必须跟着我们选择的一个内容才行) |
?<! | 负向否定预查(当我们去捕获一个内容时,前面必须跟着我们选择的一个内容才行 ) |
7)重复出现
语法 | 注释 |
---|---|
\num | |
\1 | 表示\1这个位置的内容必须和第1个小括号中的内容一模一样 |
\2 | 表示\2这个位置的内容必须和第2个小括号中的内容一模一样 |