目录
正则表达式的定义
- RegExp()构造函数
let temp = new RegExp("s$")
- 直接量语法
let temp = /s$/
直接量字符
正则表达式通过字母和数字的字面含义进行匹配,特殊的匹配项(需使用\转义)
字符 | 匹配 |
---|---|
字母和数字 | 自身 |
\o | NUL字符 |
\t | 制表符 |
\n | 换行符 |
\v | 垂直制表符 |
\f | 换页符 |
\r | 回车符 |
\xnn | 由十六进制数nn指定的拉丁字符 |
\uxxxx | 由十六进制数xxxx制定的Unicode字符 |
\cX | 控制字符^X |
含有特殊含义的符号:
^ $ . * + ? = ! : | \ / ( ) [ ] { }
字符类
使用[ ]包裹,匹配包含的任意字符
let temp = /['"]/
字符 | 匹配 |
[...] | 方括号内的任意字符 |
[^...] | 非方括号内的任意字符 |
. | 除换行符和其他Unicode行终止符之外的任意字符 |
\w | 任何ASCII字符组成的单词 |
\W | 任何非ASCII字符组成的单词 |
\s | 任何Unicode空白符 |
\S | 任何非Unicode空白符 |
\d | 任何ASCII字符组成的数字 |
\D | 任何非ASCII字符组成的数字 |
[\b] | 退格直接量 |
重复
let temp = /\d{2,4}/
字符 | 含义 |
{n,m} | 匹配前一项至少n次,但不能超过m次 |
{n,} | 匹配前一项n次或者更多次 |
{n} | 匹配前一项n次 |
? | 匹配前一项0次或者1次 |
+ | 匹配前一项1次或者多次 |
* | 匹配前一项0次或者多次 |
非贪婪的重复:
搜索字符会尽可能的多匹配,但是在匹配的字符后加上?便会变成非贪婪的重复,在搜索的时候会尽可能少的匹配
选择、分组和引用
正则表达式中可使用字符 “|” 来分割用来选择的字符
let temp = /ab|cd|ef/
尝试匹配的时候,从左向右匹配,直到发现匹配项。
圆括号()的作用:
- 将单独的项组合成子表达式
- 在完整的模式中定义子模式
let temp = /[a-z]+(/d+)/ //之后可从检索的结果中抽取数字
- 允许在同一正则表达式的后部引用前面的子表达式(通过字符串“\”后加数字来实现,数字为第几个括号,以左括号为标准)
let temp = /([Ss]cript)\2/
仅用于分组,不创建带数字编码的引用(格式为(?:)):
let temp = /([Jj]ava(?:[Ss]cript)?)\sis\s(fun\w*)\2/
这里的\2引用的是(fun\w*)而非(?:[Ss]cript)
匹配指定位置(锚字符)
字符 | 含义 |
^ | 匹配字符串的开头 |
$ | 匹配字符串的结尾 |
\b | 匹配单词的边界 |
\B | 匹配非单词的边界 |
(?=p) | 零宽正向先行断言 |
(?!p) | 零宽负向先行断言 |
修饰符
let temp = /java$/gi
字符 | 含义 |
i | 不区分大小写 |
g | 全局匹配 |
m | 多行匹配 |
用于模式匹配的String方法
search()
用来搜索字符串中是否含有正则表达式的匹配项
参数:正则表达式
若参数为字符串则自动转换为正则表达式
返回值:第一个与之匹配的字符串的位置,找不到则返回-1
replace()
用来检查和替换
参数:正则表达式,进行替换的字符串
若参数为字符串则以字符串搜索
进行替换的字符串若为“$加数字”,将使用指定的子表达式相匹配的文本替换这两个字符
也可使用函数来动态替换
match()
搜索匹配的数组
参数:正则表达式
若参数的修饰符没有指定为全局,则只检索第一个匹配项。
依然会返回一个数组,第一项存放完整的匹配项,第二项存放第一个括号的匹配项,以此类推
split()
将字符串拆分为数组
参数:正则表达式
返回值:数组
RegExp对象
let temp = new RegExp('\\d{5}', 'g')
需使用\转义\
RegExp属性
- source:正则表达式的文本
- global:布尔值,是否带有修饰符g
- ignoreCase:布尔值,是否带有修饰符i
- multiline:布尔值,是否带有修饰符m
- lastIndex:如果是全局模式,则存储字符串中下次检索开始的位置(可读写)
RegExp方法
exec()
类比match方法的非全局搜索,(无论全局还是非全局)返回搜索到的第一项的匹配数组。之后将lastIndex设置到第一项的后边,再次调用时从lastIndex的位置开始搜索,直到搜不到后将lastIndex设置为0
参数:正则表达式
返回值:数组,没有的话返回null
test()
对字符串进行检测
全局调用的时候和exec()相同,也会从lastIndex的位置开始搜索
参数:正则表达式
返回值:布尔值