世界上为什么会有正则表达式这么反人类的玩意儿? ——来自程序员的吐槽
然而事实上,正则表达式并不是每天都会用到,而其密码般的形象,随着时间的推移很容被忘记,所以经常发生的情况是,开发者对于正则表达式的记忆迅速消褪,每次遇到新的问题,都要查资料,重新唤回记忆,对于稍微复杂一点的问题,只好求助于现成的解决方案。反反复复,长期如此,不但应用水平难以明显提升,而且会对这项技术逐渐产生一定的恐惧感和厌烦情绪。 《精通正则表达式》
1. 什么是 [正则表达式]
正则为什么不太好学?
正如看到的那样,对正则表达式进行测试是很有技巧的。验证某个模式能不能获得预期的匹配结果并不困难,但如何验证它不会匹配到你不想要的东西可就没那么简单了。 正则表达式必知必会
这里的关键是正则表达式很少有对错之分(当然,前提是它们能解决问题),我们更关心的是它们的复杂程度,而这要由模式匹配操作的精确程度来决定;如果你需要更精确的匹配,就需要构造更复杂的正则表达式。 正则表达式必知必会
想要掌握正则表达式
建议进行系统学习
推荐三本书
2. 正则表达式案例分析
2.1. 移动电话、固定电话
项目实际使用的正则:
改造一波:
2.2. IPv4 地址
完整版:
/^(?:(?:\d{1,2}|1\d{2}|2[0-4]\d|25[0-5])\.){3}(?:\d{1,2}|1\d{2}|2[0-4]\d|25[0-5])$/
用例:
2.3. 千位分隔符
千位分隔符,其实就是数字中的逗号,每隔三位数加一个逗号,增强可读性。
正则:
function addComma(raw){
var regex = /(?<=[\d])(?=(\d{3})+(?![\d]))/g;
return raw.replace(regex, ",");
}
简析:
“,”应该被加到这么一个位置:这个位置右侧的数字个数是3的整数倍(而且再往后不应该再有数字了),这个位置左侧应该还有数字。
用例:
常用正则案例,将持续补充
先写这几个
3. 正则表达式笔试题
3.1. 初级难度
题目01:
题目02:
题目03:
题目04:
题目05:
题目06:
题目07:
题目08:
题目09:
题目10:
3.2. 中级难度
题目01:
题目02:
题目03:
题目04:
题目05:
题目06:
题目07:
题目08:
题目09:
3.3. 细节型题目
题目01:
题目02:
题目03:
陷阱: {} 重复次数匹配,不包含 {,n} 语法,合理语法有:{n}、{n,}、{m,n}
知识:懒惰匹配
参考:
《精通正则表达式(第三版)》 《正则指引(第二版)》 《正则表达式必知必会(修订版)》 egrep: http://regex.info/egrep.html 牛客网【正则表达式】题库: https://www.nowcoder.com/search?type=question&query=%E6%AD%A3%E5%88%99%E8%A1%A8%E8%BE%BE%E5%BC%8F