一.正则表达式的作用
规律数据的替换或原内容位置变换,如前端的模板技术,使用指定的标签把数据直接渲染在页面中
二.正则表达式的语法
1.元字符.单个字符
1 .小数点 匹配任意 单个字符 不包括换行符
2 \w 匹配任意 单个字母 或 单个数字或 单个下划线(对应的英文单词word)
3 \W 匹配任意 单个非字母 或单个非数字 或单个非下划线(与\w相反)
4 \d 匹配任意 单个数字 相当于[0-9](对应的英文单词digital)
5 \D 匹配任意 不是数字的单个字符(与\d相反)
6 \s 匹配任意 一个不可见字符,等价于[\f\n\r\t\v](对应的英文单词space)
7 \S 匹配任意 一个可见的字符(与\s相反)
8 ^ 匹配开始位置
9 $ 匹配结束位置
2.量词,表示数量
1 * 等价于{0,}
2 ? 等价于{0,1}
3 + 等价于{1,}
4 {n} 重复n次
5 {n,} 重复>=n次
6 {n,m} 重复n到m次
3.分支&字符集
1 (a|b|c) 匹配abc中的任何一个
2 [abc] ===[a-c] 一个字符集合。匹配方括号的中任意字符
3 [^abc] ===[^a-c] 一个反向字符集。匹配任何没有包含在方括号中的字符
4 由最不优化到最优化(a|b|c)=[abc]=[a-c
4.分组与引用
1 分组 :以括号进行分组
2 用括号括住的部分(pattern) 匹配pattern并获取这一匹配。该匹配内容存放在相应的内存数组中,
3 引用:一个括号对应的项以$1-$9引用,以括号的顺序从$1开始,最多可以捕获9个
4 如/(\d{4})-(\d{2})-(\d{2})/ 假设匹配2018-03-17。那么 $1对应的内容是2018
5 $2对应的内容是03
6 $3对应的内容是17
5.转义
1 使用\符合进行转义,转义的作用是把原在正则中的作用
2 还原成本来这个字符的功能
3 如:转义小数点 不是匹配任意单个字符而仅仅匹配小数点
4 \.
5 正则中有特殊含义的字符如何恰巧就要匹配这个字符就需要转义操作
6
6.惰性&贪婪
1 * 贪婪匹配 匹配更多的项 效率低
2 ? 惰性匹配 匹配更少的项 效率高些
7.零度断言
1 用于查找在某些内容(但并不包括这些内容)之前或之后的东西,
2 也就是说它们像\b,^,$那样用于指定一个位置,这个位置应该满足一定的条件(即断言), 真假判断
3 有正向真断言:(?=pattern)
4 反向真断言:(?<=pattern) 真断言使用=,假断言使用!
5 正向假断言: (?!pattern)
6 反向假断言: (?<!pattern)
8.修饰符&标志
1 g → global 全文匹配
2 i → ignoreCase 忽略大小写
3 m → multiline 多行匹配
9.前端的使用方法
1 exec 一个在字符串中执行查找匹配的RegExp方法,它返回一个数组(未匹配到则返回null)。
2 test 一个在字符串中测试是否匹配的RegExp方法,它返回true或false。
3 match 一个在字符串中执行查找匹配的String方法,它返回一个数组或者在未匹配到时返回null。
4 search 一个在字符串中测试匹配的String方法,它返回匹配到的位置索引,或者在失败时返回-1。
5 replace 一个在字符串中执行查找匹配的String方法,并且使用替换字符串替换掉匹配到的子字符串。
6 split 一个使用正则表达式或者一个固定字符串分隔一个字符串,并将分隔后的子字符串存储到数组中的String方法。
三.正则表达式的简单使用
1.验证Email
一般Email以@分隔,@符合前面是用户的邮箱名,@符合后面是邮箱服务器的域名
1 例子:/\w+@\w+\.\w+/.test('[email protected]')
2.验证Url
一般是http://www.baidu.com 或者https://www.qq.com
1 例子:/https?:\/\/\w+\.\w+(\.\w+)+/.test('http://www.qq.com')
注意//像正则表达式的/pattern/.所以要对/进行转义成本来的意思
3.原内容提取
如商品:可乐,价格:2元 提取可乐=2元
1 "商品:可乐,价格:2元".replace(/商品:(\S+)(?=\,),价格:(\d+)(?=元)元/,'$1=$2元')
四.正则表达式的原理和性能
正则表达式是使用正则引擎进行运算和处理的,常见的正则引擎包括
1. DFA (Deterministic finite automaton) 确定型有穷自动机
2. NFA (Non-deterministic finite automaton) 非确定型有穷自动机,大部分都是NFA
简单解释:按照所给出的正则表达式按照从左到右的顺序加上部分优先规则逐个去匹配,第一个字符不成功丢弃,从第二个字符开始重新匹配,尝试完所给的字符所有可能的匹配直到所给的正则表达式都匹配到再判断成功和失败
规则一 优先选择最左端的匹配结果
规则二 标准量词是匹配优先的* ? + {m,n}
规则三 过度的优先匹配
规则四 表达式为主
规则五 回溯
如/a*b*d/ 要匹配aaaaabcaabbcaaaabbd
1.aaaaab 成功c失败
2.aaaab成功c失败
3.aaab成功c失败
4.aab成功c失败
5.ab成功c失败
6.b失败
7.c失败
8.aabb成功c失败
9.abb成功c失败
10b失败
11b失败
12 c失败
13.aaaabbd 匹配成功