正则表达式
定义
- 对字符串进行描述的
作用
- 表单验证
- 验证 邮箱/电话/邮编 ....
- WEB编辑器
- 爬虫、数据抓取、小偷程序
定义正则表达式
- 直接量
- 函数
- 构造函数
正则表达式基础
原子
- 正则表达式的最小组成单位
- 普通的字母、数字、符号 都是原子
- 转义字符
- 字符类
字符直接量(原子)
- 原子的重要组成
- 普通的字母、数字、符号
- v
- f
- 退格符
- x00
- u0000
字符类(原子)
- d 数字 [0-9]
- D 除了数字之外的字符 [^0-9]
- w 数字、字母、下划线 [0-9a-zA-Z_]
- W 除了数字、字母、下划线 之外的字符 [^0-9a-zA-Z_]
- s 空白符 [ v f ]
- S 除了空白符之外的字母 [^ v f ]
- . 除了换行外所有的字符 [^ ]
- [...]
- [^...]
- [] 匹配退格符
重复(对原子的数量修饰)
- + 表示前面原子出现1次或多次 {1,}
- ? 表示前面的原子出现0次或1次 {0,1}
- * 表示前面的原子出现0次1次或多次 任意次 {0,}
- {m} 前面的原子出现m次
- {m,n} 前面的原子出现m到n次
- {m,} 前面出现的原子个数m次以上
- 非贪婪的重复(对修饰符的修饰,后面加?)
指定匹配的位置 (对原子位置的修饰) 边界
- 单词边界
- B 不是单词边界
- ^ 字符串开始边界
- $ 字符串结束边界
- 先行断言(正向预查) (?=)
- 负向先行断言(负向预查) (?!)
- 先行断言和负向先行断言只能匹配后面的
选择修饰符
- | (逻辑或) /a|b/ 匹配a或者b /abc|def/ 匹配abc 或者def 字符串的结合优先级高于选择 /ab(c|d)ef/ 匹配abcef 或者abdef
模式单元 ()
- 改变优先级
- 把多个原子当做一个原子
- 把模式单元匹配的内容暂存内存 (?:) 可以取消暂存内容
- 暂存内存的内容可以被反向引用 $1
修饰符(模式修正符)
- i 正则表达式不区分大小写
- m 允许多行(换行被当做字符串结束符)
- g 全局匹配
正则的使用
RegExp对象
- test() 返回: true/false
- exec() 返回:数组/null
String对象
- search() 匹配成功(第一次满足正则的位置) 匹配失败(-1)
- match() 匹配成功(返回数组 全局匹配影响) 失败(null)
- replace() 替换
-
split() 把字符串分割为数组 console.log("abc123".search(/d{2}/)); //3 console.log("abc123".search(/^d{2}/)); //-1
console.log("1abc34io".match(/[a-z]{2}/)); console.log("1abc34io".match(/[a-z]{d}/)); console.log("1abc34io".match(/[a-z]{2}/g)); console.log("1abc34io".match(/[a-z]{9}/g));