1. 正则表达式的创建
- 直接量创建
/pattern/attrs
- 对象创建
new RegExp(pattern,attrs)
参数:
- pattern:描述性质的字符串
- attrs:修饰符
2. 正则表达式语法
- 直接量字符
/123abc/
符号 | 含义 |
---|
\o | NULL |
\t | 制表符 |
\v | 垂直制表符 |
\n | 换行符 |
\r | 回车符 |
\f | 换页符 |
- 字符类
符号 | 含义 |
---|
[…] | 在括号中的任意一个字符 |
[^…] | 不在括号中的任意一个字符 |
. | 除换行符和其他Unicode行终止符之外的任意字符 |
\w | [a-z, A-Z, 0-9] |
\W | [^a-z, A-Z, 0-9] |
\s | 任何unicode空白符 |
\S | 任何非unicode空白符 |
\d | [0-9] |
\D | [^0-9] |
- 重复
符号 | 含义 |
---|
{n,m} | 重复前一项至少n次,至多m次 |
{n,} | 匹配前一项至少n次 |
{n} | 匹配前一项n次 |
? | 匹配前一项0次或1次 |
+ | 匹配前一项至少一次 |
* | 匹配前一项0次或多次 |
- 选择
- 分组及捕获
符号 | 含义 |
---|
(…) | 分组并捕获,如:/(abc)+/ |
(?..) | 分组但不捕获 |
⚠️ 不被捕获的分组不能被重复利用
⚠️ 被捕获的分组可以被重复利用,如:/(')\d+(')/
,其中的第二个(')
不需要再次书写,可以写成:/(')\d+\1/
。(利用\数字
的形式)
- 锚点
符号 | 含义 |
---|
^ | 匹配字符串开头 |
$ | 匹配字符串结尾,如:/^1\d{10}$/ 匹配一个11位的手机号 |
\b | 匹配单词边界 |
\B | 匹配非单词边界 |
- 修饰符
符号 | 含义 |
---|
i | 不区分大小写,如:/abc+/i |
g | 全局匹配 |
m | 多行匹配模式 |
3. 正则表达式上的方法
3.1 字符串上的方法
String.prototype.match(RegExp)
参数:RegExp–正则表达式对象
返回值:匹配项数组String.prototype.search(RegExp)
参数:正则表达式对象
返回值:第一个匹配项的起始位置,如果没有匹配项,返回-1.
⚠️ 该方法不支持gString.prototype.replace(RegExp|substr, replacement)
参数:RegExp|substr:正则表达式对象或需被替换的子字符串
replacement:去替换原字符串的新字符串,或创建新字符串的函数
返回值:被替换后的新字符串
3.2 RegExp对象提供的方法
RegExp.prototype.test(string)
–>检验字符串是否匹配给定的正则表达式
参数:用来匹配的字符串
返回值:布尔值
/12345/.test('12345')
RegExp.prototype.exec(string)
–>执行搜索匹配,得到结果数组
参数:用来匹配的字符串
返回值:完整的匹配数组,第一个元素是匹配的字符串,余下的元素是与分组的字表达式匹配的子串。
⚠️ 该方法会改变RegExp.lastindex属性的值。(该属性指定下一次匹配的起始索引,只有使用全局匹配时才生效)