什么是正则
怎么书写?
const reg = /\d/
- 构造函数创建
- 类似数组 对象等 正则也有构造函数(RegExp())
const reg = new RegExp('abc')
两种创建方式的差异
- 在修饰符书写上
- 字面量创建的正则在书写修饰符时,直接在最后添加就行
const reg = /\d/g/i //g为全局标志 i 为大小写不敏感
const reg = new RegExp('\d','i/g')
正则符号
- 元字符 (
.; \; \s; \S; \d; \D; \w; \W)
- 1、点
. 表示一位非换行字符
- 2、
\转义字符 将有意义的字符转换为无意义的文本 或 将无意义的文本转换为 有意义的符号
- 3、
\s 表示一位空白字符(空格 换行 等)
- 4、
\S 表示一位非空白字符 ([^\s])
- 5、
\w 表示一位数字字母下划线 相当于/\d|[a-z]|[A-Z]|[-]/
- 6、
\W 表示一位非数字字母下划线 相当于 /[^(\d|[a-z]|[A-Z]|[-])]/
- 7、
\d 表示一位数字/[0 - 9]/
- 8、
\D 表示一位非数字/(^[0 - 9])
- 边界符 (
^; &)
const reg = /^\d/
const reg = /\d$/
- 限定符 (
*; +; ?; {n}; {n,}; {n, m})
- 1、
* 表示字符出现零次或者无数次(就是有没有都行)
- 2、
+ 表示出现1次或者无数次 (只要有就行)
- 3、
{n} 表出现 n 次 (固定次数)
- 4、
{n,} 表示至少出现n次
- 5、
{n, m} 最少出现n 次 最多出现m次
- 特殊符号 (
(); []; [^]; -; |)
()代表一个整体 即括号内的需要全部满足 否则就是不满足
[]括号是范围 匹配的时候只要符合一个就行(一位)
[^]表示非 即不包括
-到 比如 数字0到9[0-9]
| 代表逻辑或 [数字或字母]-->([0-9]|([a-z][A-Z]))
- 重复元字符 (
\数字)
- 标识符 (
i; g)
案例
- 把字符串内所有满足正则规则的片段全部获取出来, 并存储到数组中
const reg = /\d{3}/g
const str = 'z123xc456vb789nm000'
let newArr = reg.exec(str)
var arr = []
while (newArr !== null) {
arr.push(newArr[0])
newArr = reg.exec(str)
}
console.log(arr)
正则的两大特性 (懒惰与贪婪)
- 懒惰
- 正常捕获字符串的时候, 总是从下标0开始
- 解决方式: 给正则添加一个修饰符 g
- 贪婪
- 每次在捕获的时候, 会尽可能的多捕获一些东西
- 在原有的修饰符后添加一个 ? 然后相当于开启 非贪
- 贪婪限定符
* + ? {n,} {n,m}
正则的方法 (常用: test; exec)
- test 方法用于匹配字符是否符合规则 符合返回true 否则返回false
- 语法: 类似数组方法 语法就是正则.test('匹配的字符串')
- 捕获 exec 捕获嘛 当然返回捕获到的内容 否则返回空值(null)
- 捕获结果 受正则修饰符的影响(指g)
- 在没有全局标志的情况下 只会捕获到第一个符合条件的
const reg = /\d{3}/
console.log(reg.exec('z123xc456vb789nm000'))
console.log(reg.exec('z123xc456vb789nm000'))
console.log(reg.exec('z123xc456vb789nm000'))
- 在有修饰符 g的情况下 多次捕获会捕获全部符合项 捕获完全部符合项目后再次捕获 则返回null 若继续捕获则会从0开始继续捕获
const reg = /\d{3}/g
console.log(reg.exec('z123xc456vb789nm000'))
console.log(reg.exec('z123xc456vb789nm000'))
console.log(reg.exec('z123xc456vb789nm000'))
console.log(reg.exec('z123xc456vb789nm000'))
console.log(reg.exec('z123xc456vb789nm000'))
- 还有就是在有小括号的情况下 相当于正则匹配字符串(个人理解)
const reg1 = /(\d{4})(\d{2})(\d{2})(\d{2})(\d{2})(\d{2})(\d{2})(\d{2}|\dx)/
const str1 = '我的身份证号是 41137120041108123x; 不信算了!!!'
console.log(reg1.exec(str1))
正则搭配使用的字符串方法
- search()方法
- 语法 字符串方法 所以就是和字符串方法一样的语法
例
let reg = /\d/
let str = 'dfdff555226'
str.search(reg)
- 作用:类似indexOf() search()也返回符合条件的第一个下标 没有找到则返回 -1
- match()方法
语法:
例
let reg = /\d/
let str = 'dfdff555226'
str.match(reg)
作用:match()的作用就是捕获
- 当没有全局标志时 match()的作用类似exec() 也就是默认只捕获首个符合元素 且懒惰
- 当有全局标志g时 match()方法返回一个数组 数组内是所有符合条件的值
- replace()方法
let reg = /\d/
let str = 'dfdff555226'
str.replace(reg,'替换为')
作用:该方法会将符合限制的字符替换为规定字符