1 . RegExp(正则表达式)
正则表达式(RegExp)是Regular Expression缩写,是用于查找符合某些规则的字符串的工具。
正则表达式是一个描述字符模式的对象,当检索某个文本时,可以使用一种模式来描述要检索的内容,RegExp 就是这种模式。
1 . 1 正则的创建:
1 . 1 . 1 构造函数:
var reg1 = new RegExp('a' , 'i')
1 . 1 . 2 字面量创建:
var reg2 = /a/i
上面两种创建方式所表达的内容是一致的,都是匹配字符串中的’a’,并且是忽略大小写的。
1 . 2 正则对象的属性和方法:
上面我们仅仅只是得到一个正则对象,还不能做任何事情,例如对字符串的校验等。
1 . 2 . 1 正则对象的属性:
- global:全局的,对应修饰符
g - ignoreCase:忽略大小写,对应修饰符
i - multiline:多行,对应修饰符
m - lastIndex:下一次匹配的字符位置
1 . 2 . 2 正则对象的属性:
test():测试方法,用于测试一个字符串是否符合正则表达式对象所指定的模式规则,返回true或falseexec():搜索方法,用于在字符串中查找符合正则表达式对象所指定的模式的子字符串,返回找到的结果,若找不到则返回null
1 . 3 匹配模式 pattern :
正则表达式的基本组成元素可以分为:字符和元字符。
单个字符:
- 最简单的正则表达式可以由简单的数字和字母组成,没有特殊的语义,纯粹就是一一对应的关系。如想在'apple'这个单词里找到‘a'这个字符,就直接用
/a/这个正则就可以了。 - 想要匹配特殊字符的话,就得请出我们第一个元字符**
\**, 它是转义字符字符,顾名思义,就是让其后续的字符失去其本来的含义。举个例子:- 我想匹配
*这个符号,由于*这个符号本身是个特殊字符,所以我要利用转义元字符``来让它失去其本来的含义,即/\*/.
- 我想匹配
- 如果本来这个字符不是特殊字符,使用转义符号就会让它拥有特殊的含义。我们常常需要匹配一些特殊字符,比如空格,制表符,回车,换行等, 而这些就需要我们使用转义字符来匹配。
| 特殊字符 | 正则表达式 | 记忆方式 |
|---|---|---|
| 换行符 | \n | new line |
| 换页符 | \f | form feed |
| 回车符 | \r | return |
| 空白符 | \s | space |
| 制表符 | \t | tab |
| 垂直制表符 | \v | vertical tab |
| 回退符 | [\b] | backspace,之所以使用[]符号是避免和\b重复 |
多个字符:
单个字符的映射关系是一对一的,即正则表达式的被用来筛选匹配的字符只有一个。而这显然是不够的,只要引入集合区间和通配符的方式就可以实现一对多的匹配了。
| 匹配区间 | 正则表达式 | 记忆方式 |
|---|---|---|
| 除了换行符之外的任何字符 | . | 句号,除了句子结束符 |
| 单个数字, [0-9] | \d | digit |
| 除了[0-9] | \D | not digit |
| 包括下划线在内的单个字符,[A-Za-z0-9_] | \w | word |
| 非单字字符 | \W | not word |
| 匹配空白字符,包括空格、制表符、换页符和换行符 | \s | space |
| 匹配非空白字符 | \S | not space |
循环与重复:
就该介绍如何同时匹配多个字符。要实现多个字符的匹配我们只要多次循环,重复使用我们的之前的正则规则就可以了。那么根据循环次数的多与少,我们可以分为0次,1次,多次,特定次。
0 | 1 ?
元字符?代表了匹配一个字符或0个字符。设想一下,如果你要匹配color和colour这两个单词,就需要同时保证u这个字符是否出现都能被匹配到。所以你的正则表达式应该是这样的:/colou?r/。
>= 0 *
元字符*用来表示匹配0个字符或无数个字符。通常用来过滤某些可有可无的字符串。
>= 1 +
元字符+适用于要匹配同个字符出现1次或多次的情况。
特定次数:
在某些情况下,我们需要匹配特定的重复次数,元字符
{和}用来给重复匹配设置精确的区间范围。如'a'我想匹配3次,那么我就使用/a{3}/这个正则,或者说'a'我想匹配至少两次就是用/a{2,}/这个正则。
- {x}: x次
- {min, max}: 介于min次到max次之间
- {min, }: 至少min次
- {0, max}: 至多max次
位置边界:
上面我们把字符的匹配都介绍完了,接着我们还需要位置边界的匹配。在长文本字符串查找过程中,我们常常需要限制查询的位置。比如我只想在单词的开头结尾查找。
| 边界和标志 | 正则表达式 | 记忆方式 |
|---|---|---|
| 单词边界 | \b | boundary |
| 非单词边界 | \B | not boundary |
| 字符串开头 | 小头尖尖那么大个 | |
| 字符串结尾 | $ | 终结者,美国科幻电影,美元符$ |
| 多行模式 | m标志 | multiple of lines |
| 忽略大小写 | i标志 | ignore case, case-insensitive |
| 全局模式 | g标志 | global |
上述为基础用法,更高级的子表达式见[ ](正则表达式不要背 - 掘金 (juejin.cn))