Appearance
正则
创建正则表达式
- 字面量创建
js
const reg = /a/g
- 构造函数创建
js
const reg = new RegExp('a', 'g')
选择符
|
代表选择修饰符,满足左右两边任何表达式即为真
js
// 检测手机号中是否包含1或者4
const phone = 18233333333
const reg = /1|4/
reg.test(phone) // true
字符边界
边界符 | 含义 |
---|---|
^ | 匹配字符串的开始 |
$ | 匹配字符串的结尾,忽略换行符 |
转义字符
在正则表达式中,一些字符含有特殊含义,如果我们要匹配该字符本身,就需要进行转义。 \
表示转义符
js
// 匹配字符串中是否包含.
const reg = /\./
检测网址
js
const url = 'http://www.whbbit.cn'
const reg = /https?:\/\/\w+\.\w+\.\w+/
console.log(reg.test(url))
元字符
元字符是正则表达式中的最小元素,只代表一个字符
元字符 | 含义 |
---|---|
\d | 匹配任何一个数字字符 |
\D | 匹配任何一个不是数字的字符 |
\w | 匹配任何一个英文字母、数字、下划线字符 |
\W | 匹配任何一个除英文字母、数字、下划线的字符 |
\s | 匹配任意一个空白字符,如空格、制表符、换行等 |
\S | 匹配任意一个非空白字符 |
. | 匹配除换行外的任意字符 |
js
const str = '1234567890'
// 匹配字符串中是否有数字
const reg = /\d/
console.log(reg.test(str)) // true
模式修饰
模式修饰 | 含义 |
---|---|
i | 不区分大小写 |
g | 全局搜索所有匹配内容 |
m | 视为多行 |
s | 忽略换行符 |
y | 从 regexp.lastIndex 开始匹配 |
u | 正确处理四个字符的UTF-16编码 |
分组
()
表示分组
js
// 匹配字符串中是否包含12或者34
const reg = /(12|34)/
分组中的 ?:
表示不记录该组
lastIndex 每次匹配后lastIndex都是字符所在位置,直至匹配不到重制为0
原子表
在一组字符中匹配某个元字符,在正则表达式中通过元字符表来完成。[]
内表示该元字符表
原子表 | 含义 |
---|---|
[] | 只匹配其中的一个原子 |
[0-9] | 匹配0-9任意一个数字 |
[a-z] | 匹配任意一个小写字母 |
[A-Z] | 匹配任意一个大写字母 |
重复匹配
符号 | 含义 |
---|---|
* | 表示匹配前一个字符0次或者无限次 |
+ | 表示匹配前一个字符1次或者无限次 |
? | 表示匹配前一个字符0次或者1次 |
{n} | 表示匹配前一个字符n次 |
{n,} | 表示匹配前一个字符n次或者无限次 |
{n,m} | 表示匹配前一个字符n次到m次 |
前瞻运算符
前瞻运算符不消耗字符,可以用于字符串的预检。(?=规则)
- 匹配一个6-12位的字符串,包含大写字母、小写字母、数字、特殊字符@.
js
const reg = /^(?=[A-Z])(?=[a-z])(?=\d)(?=[@.])[A-Za-z\d@.]{6,12}$/