前言:
在日常项目开发中,正则的使用场景还是很多的,常见的使用场景:
1、给当前的地址栏添加参数
2、获取地址栏的参数
3、验证表单格式:手机号验证、邮箱的验证、保留两位小数的值的验证等
等等,学会正则,能极大的提高我们在项目开发中解决问题的效率。
什么是正则表达式?
正则表达式是记录文本规则的代码,或者说它是用来进行文本匹配的工具。
学习正则表达式的规则:
1、元字符(匹配字符)
补充其他元字符:
+ :匹配重复1次或更多次
* :匹配重复任意次
例子:
hi.*Lucy
规则描述:先匹配一个hi的单词,然后是任意个除了换行符以外的任意字符(*是匹配任意个,.是匹配除换行符以外的任意字符),最后匹配一个lucy的单词。
^d{5,12}$
规则描述:只能输入5到12位的数字(^匹配字符串的开头,$匹配字符串的结尾)
2、字符转义
查找元字符本身,需要加来取消字符的特殊意义。
例如查找.、*、: .、*、\
3、定义重复
Windowsd+
规则描述:匹配windows后面跟着1个或多个数字的字符串
4、字符类(自定义匹配的字符)
[]匹配指定的字符
例子:
[.?!]
规则描述:匹配标点符合.或?或!
[a-z0-9A-Z_]
规则描述:等同于w匹配字母、下划线、数字
5、分歧条件(制定多个规则的表达式)
| 分割多个规则
例子:
(0d{2})[- ]?d{8}|0d{2}[- ]?d{8}
规则描述:匹配(022)-87678883或022-87678883或02287678883或(022)87678883
6、分组(一个规则重复匹配多次的定义方法)
使用()包裹规则
例子:
一个简单的ip匹配规则
(d{1,3}.){3}d{1,3}
正确ip匹配规则
((2[0-4]d|25[0-5]|[01]?dd?).){3}(2[0-4]d|25[0-5]|[01]?dd?)
7、分组高级用法
1、后向引用(这个名字取的都不好理解)
用于重复搜索(重复匹配)前面某个分组匹配的文本
(w+)s+1
规则描述:匹配例如:youyi youyi beier,结果为youyi youyi,1代表第一个组匹配的文本,从左到右以分组的左括号为标志,第一个出现的分组为1组,第二个为2组,以此类推。
另外一种反向引用的写法
(?<Word>w+)s+k<Word>k<Word>
规则描述:?<word>(或?'word')通过这种方式来给分组匹配到的文本定义一个别名,反向分组中可以通过k加<word>来引用前面分组中匹配到的文本
2、断言
((?<=d)d{3})+
规则描述:123456789,匹配结果456789;1234567890,匹配结果234567890.
8、反义
<a[^>]+>
规则描述:匹配用尖括号括起来的以a开头的字符串(不加这个规则[^>],会匹配不上例如:<a5456>这样的格式,我的理解是在匹配字符串时会 将最后的>当做一个字符串,而不是在匹配>)
9、贪婪与懒惰(匹配最短的符合条件的字符串)
a.*?b
规则描述:aabab,匹配结果aab。
练习:
1、给一个很长的数字中每三位间加一个逗号
2、包含后面不是字母u的字母q的单词
3、其他博主博客:https://2ue.github.io/2017/11/24/regex-to-something/
参考学习资源:
MDN: 正则表达式
正则表达式30分钟入门教程:正则入门
持续更进中...