正则表达式基础
元字符
正则表达式 | 说明 |
---|---|
\d | 匹配任意单个数字 |
\D | 匹配\d规则之外的任意单个字符 |
\w | 匹配任意单个字母数字下划线 |
\W | 匹配\w之外的任意单个字符 |
\s | 匹配单个空格 |
\n | 匹配单个换行符 |
. | 匹配任意单个字符(换行符外) |
. | 只匹配. |
字符范围匹配
正则表达式 | 说明 |
---|---|
A | 精准匹配单个字符 |
x|y | 允许出现的2个字符 |
[xyz] | 字符集合,允许出现集合内的任意单个字符 |
[a-z] | 字符范围 |
[^0-9] | 集合内字符不允许出现 |
多次重复匹配
正则表达式 | 说明 |
---|---|
A | 精准n次匹配 |
A | 最少出现n次 |
\d | 约定出现的最少次数和最大次数 |
\d* | 0到无限次 |
\d+ | 只少出现1次 |
\d? | 0或1次 |
定位匹配
正则表达式 | 说明 |
---|---|
^A | 头匹配 |
A$ | 尾匹配 |
^A$ | 全字匹配 |
修饰符
修饰符 | 作用 | 示例 |
---|---|---|
i | 不区分大小写 | /a/i 匹配 A 或 a |
g | 全局匹配(匹配所有结果) | 'aA'.match(/a/gi) → ['a', 'A'] |
m | 多行模式(^ 和 $ 匹配行首/行尾) | /^a/m 匹配每行开头的 a |
贪婪模式
在满足条件的情况下尽可能多匹配到字符串
示例:111222333 正则:\d{6,8} 结果: 111222333
非贪婪模式
在满足条件的情况下尽可能少匹配到字符串。需要在数量后面加'?'
示例:111222333 正则:\d{6,8}? 结果: 111222
表达式分组
分组将'正则'分组为多个自表达式
前瞻表达式
正向前瞻(?=)
解释:从左→右匹配符合的
例子
js
const reg = /\d(?=[a-z])/g
const str = '1d2c33b55q'
console.log(str.replace(reg, '*')) // 打印*d*c3*b5*q
\d(?=[a-z])
正则含义: 先看下数字后面是否是字母,如果是,就把满足条件的数字替换掉
负向前瞻(?!)
解释:从左→右匹配不符合的
例子
js
const reg = /\d(?![a-z])/g
const str = '1d2c33b55q'
console.log(str.replace(reg, '*')) // 打印1d2c*3b*5q
\d(?![a-z])
正则含义: 先看下数字后面是否是字母,如果不是,就把满足条件的数字替换掉
使用场景
- 检测密码是否同时包含字母和数字
js
const reg = /^(?=.*\d)(?=.*[a-z])[0-9a-z]{3,6}$/i
console.log(reg.test('dsx12')) // true
console.log(reg.test('da')) // false
console.log(reg.test('121')) // false