《JavaScript 正则表达式》
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
若不想捕获分组的话,在分组内加上?:
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
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⃣️ 原字符串