正则的两种常用方法
1. 匹配 test
- 匹配符合正则规则的字符串 符合返回值 true 不符合返回值 false
- 语法 : 正则.test(要检测的字符串)
2. 捕获 exec
- 语法: 正则.exec(要捕获的字符片段)
- 没有捕获到 ---> 返回值 null
- 可以捕获到1 ---> 返回值 是一个数组 ; 索引为 0 的项 就是捕获到的片段 ,没有() 也没有修饰符 g 无论捕获多少次都是 要捕获的那个片段
- 可以捕获到2 ---> 当有 修饰符 g 时 每次捕获都会 自 上一次 捕获时 结束时的下标 开始从新捕获 直到整个字符结束 返回值 是一个数组 每次下标为 0 的项都不同
- 可以捕获到3 ---> 当有 () 参与时 下标 0 还是我们捕获到的片段 后续的 下标都是()里的值
元字符
3. 普通元字符
-
- \d 表示一位(一个)数字(0-9)
-
- \D 表示一位非数字(除了0-9)
-
- \w 表示数字(0-9),字母(a-z),下划线(_)其中一个
-
- \W 表示非数字(0-9),字母(a-z),下划线(_)其某一个
-
- \s 表示表示一位空白字符
-
- \S 表示非空白字符
-
- . 表示一位非换行的一位任意字符
-
- \ 1.把没有意义的符号,转为没有意义的文本 2.把没有意义的文本转为有意义的符号
限定元字符
- 限定元字符, 表示前面一个 符号 出现多少次
-
- *(*号) 表示0~正无穷大
-
-
- (+ 加号) 表示1~正无穷大
-
-
- ? 表示0~1次
-
- {n} 表示限定 n次 不能多也不能少
-
- {n,} 表示最少 n次
-
- {n,m} 表示最少 n次 最多 m次
特殊元字符
-
- ()
- 1.1 含义: 将 当成一个整体
- 1.2 含义: 单独 捕获
-
- | 或的意思 两边是什么 和 什么 都行 如 a|b | 两边是a或者是b 都可以
-
- [] 包含 的意思 如[abcd] 包含其中一项就可以 []实际代表的就是一个字符
-
- [^] 非 的意思 如[^abcd] 只要不是他们中的一个即可 [^]实际代表的就是一个字符
-
-
-
到(至) 的意思 通常于 包含 和 非 一起使用 [0-9] 数字0-9中的一个 [^0-9] 不是数字0-9中的一个 [a-z] 字母a-z [A-Z] 大写字母A-Z
-
-
重复元字符
- 1.\1 \2 ....\9 如:/(abc)|(def)\1/ 若()内是abc 则 \1 的位置也需要时abc 若()内时def 则 \1的位置也需要时def
//重复元字符
//单独书写一个标签时要用()包起来
const reg12 = /<(p|span)><\/\1>/
console.log(reg12.test('<span></span>'))
const reg13 = /<(p|div)><\/\1>/
console.log(reg13.test('<div></div>'))
const reg14 = /<(h1|h2)><\/\1>/
console.log(reg14.test('<h2></h2>'))
const reg15 = /<(header)><\/\1>/
console.log(reg15.test('<header></header>'))
正则的修饰符
- 书写在正则外边 用于描述整个正则表达式
-
- i 忽略大小写
-
- g 全局
正则的懒惰和贪婪
懒惰
*正常捕获字符串的时候, 每次都从 下标0开始 解决方式: 给正则添加一个修饰符 g
贪婪
- 每次在捕获的时候, 会尽可能的多捕获一些东西 解决: 在原有的修饰符后添加一个 ? 然后相当于开启 非贪婪模式
- 贪婪: 能多拿就多拿
- 非贪婪: 能少拿就少拿
贪婪限定符
- *(*号)
- +(+号)
- ?
- {n,}
- {n,m}
非贪婪限定符
- *?
- +?
- ??
- {n,}?
- {n,m}?
const str = '<div class="box" id="box1"><span></span></div>'
const reg = /<div.*>/ // 贪婪模式
console.log(reg.exec(str))
const reg1 = /<div.*?>/ // 非贪婪模式
console.log(reg1.exec(str))