1、什么叫正则表达式?
使用单个字符串来匹配一系列符合某个语法规则的字符串
2、正则表达式工具?
3、js中正则表达式的语法?
js通过内置对象RegExp支持正则表达式
1⃣️字面量: var reg = /\bis\b/g
2⃣️构造函数: var reg = new RegExp(/\bis\b/, ‘g’)
4、修饰符?
标志 | 全称 | 含义 |
g | global | 全文搜索,不添加的话搜索到第一个匹配停止 |
i | ignore case | 忽略大小写,默认大小写敏感 |
m | multiple lines | 多行搜索 |
5、元字符?
类型 | 标志 | 等同于(或示例) | 含义 |
字符类 | [] | [abc] | a或b或c |
反向类 | ^ | [^abc] | 非a、b、c |
范围类 | - | [0-9] | 0-9之间的数字 |
预定义类 | . | [^\r\n] | 除回车换行之外的所有字符 |
\d | [0-9] | 数字字符 | |
\D | [^0-9] | 非数字字符 | |
\s | [\t\n\x0B\f\r] | 空白符 | |
\S | [^\t\n\x0B\f\r] | 非空白符 | |
预定义类 | \w | [a-zA-Z_0-9] | 单词字符 |
\W | [^a-zA-Z_0-9] | 非单词字符 | |
边界
| ^ |
| 以……开始 |
$ |
| 以……结束 | |
\b |
| 单词边界 | |
\B |
| 非单词边界 | |
量词 | ? |
| 出现0次或1次(最多一次) |
+ |
| 出现1次或多次(至少一次) | |
* |
| 出现0次或多次(任意次) | |
{n} |
| 出现n次 | |
{n,m} |
| 出现n到m次 | |
{n,} |
| 至少出现n次 |
6、贪婪模式——尽可能多的匹配
7、非贪婪模式——尽可能少的匹配 (在量词后加上?)
8、 分组
使用()可以达到分组的功能
1⃣️ 分组在量词中的引用
/Byron{3}/ ———> 将n重复三次
/(Byron){3}/g ———> 将Byron重复三次
2⃣️ 分组在或中的引用
/Byron|Casper/ ———> Byron或Casper
/Byr(on|Ca)sper/ ———> Byronsper 或 ByrCasper
3⃣️ 反向引用,利用$捕获分组的内容
2019-12-21变成 12/21/2019
a. 非命名捕获
b.命名捕获
若不想捕获分组的话,在分组内加上?:
9、前瞻
正则表达式从文本头部向文本尾部解析,文本尾部方向,成为前
在正则表达式匹配到规则时,向前检查是否符合断言,符合某个特定断言叫正向匹配不符合某个特定断言叫负向匹配。
正向前瞻 exp(?= assert)
负向前瞻 exp(?!assert)
10、RegExp对象属性
global: 是否全文搜索,默认false
ignorCase: 是否大小写敏感,默认false
multiline: 多行搜索,默认false
lastIndex: 当前表达式匹配内容的最后一个字符的下一个位置
source: 正则表达式的文本字符串(不带标志位的那种)
11、RegExp对象方法
1⃣️ RegExp.prototype.test(str) 用于测试字符串参数中是否存在匹正则表达式模式的字符串,存在返回true,不存在返回false
全局调用下,每次都从上一次匹配结果的最后一个字符的下一个字符匹配,匹配到最后再重置。
非全局调用下, lastIndex不生效
2⃣️ RegExp.prototype.exec(str) 使用正则表达式对字符串执行搜索,并将更新全局RegExp对象的属性以反映匹配结果;若无匹配文本返回null,否则返回一个结果数组,数组的第一个参数为与正则表达式相匹配的文本、第二个参数为与第一个子表达式相匹配的文本、第三个参数为与第二个子表达式相匹配的文本,以此类推……
数组有两个属性:
index:声明匹配文本的第一个字符的位置
input:存放被检索的字符串的string
groups:一个新的field
,用来存储命名捕获组的信息
12、字符串对象方法
1⃣️ string.prototype.search(reg) 用于检索字符串中的子字符串,或检索与正则表达式相匹配的子字符串,该方法返回第一个匹配结果的index,找不到则返回-1。search()方法不支持全局匹配,所以会自动忽略标志g,并且总是从字符串的开始进行检索。
2⃣️ string.prototype.match(reg) 检索字符串,找到一个或多个匹配的文本。
非全局调用:只执行一次匹配,若没有找到匹配的文本返回null,否则返回一个数组,其中存放了与匹配文本有关的信息。该返回数组与exec方法返回数组相同。
全局调用:多次匹配,找到所有。若没找到任何匹配的子串,返回null;若找到了一个或多个匹配的子串,则返回一个数组。数组元素中存放的是字符串中所有匹配子串,而且没有index和input属性。
3⃣️string.prototype.split(reg) 将字符串分割成数组,在复杂情况下,我们使用正则表达式解决
4⃣️ 1、string.prototype.replace(str, replaceStr)
2、string.prototype.replece(reg, replaceStr)
3、string.prototype.replece(reg, function)
function在每次匹配后替换时调用,有4个参数:
1⃣️ 匹配字符串
2⃣️ 正则表达式分组内容,没有分组则没有该参数
3⃣️ 匹配项在字符串中的index
4⃣️ 原字符串