最近参加了百度ife的前端培训,在完成task0002的过程中要求学会正则表达式,曾经在javascript的教学图书中有看过正则表达式,但都讲的不够系统,自己也不够重视,所以就几乎是正则表达式零基础。于是花了不到一个晚上的时间把《入门正则表达式》看完了,一百多页,比网上的大多数教程系统,入门足矣。
首先推荐两个在线测试正则的网站,边学边测试反复实践当然学的更快了。
http://regexpal.com/
http://regexr.com/
个人更喜欢用第二个,功能更加齐全,而且界面更美观一些。
MDN正则表达式 这个这教程结合书使用效果更加。
以下是我在Evernote上整理的读书笔记,由于是按自己学习的状态整理所以有些简单不系统,更加建议看书:
元字符(metacharacter)是在正则表达式中有特殊含义的字符,也是保留字符。[0-9]这种形式的正则表达式称作字符组(character class)。
\d可以像[0-9]一样匹配任意阿拉伯数字这种正则表达式叫做字符组简写式(character shorthand),也叫转义字符(character escape)。
使用\D匹配任何一个非数字字符,会匹配空格,字母和标点符号。
.是一个通配符,可以匹配任意字符(但某些情况下不能匹配行起始符)。
脱字符^匹配行起始位置
美元$匹配行结束位置
竖线符|表示选择,也就是从多个可选项中选择一个。
\w只匹配字母,数字,下划线
x(?=y) 匹配’x’仅仅当’x’后面跟着y 正向肯定查找
x(?!y) 匹配’x’ 仅仅当’x’后面不跟着’y’,这个叫正向否定查找
使用量词
{3}花括号中的数字表示带查找的数字出现的次数。包含数字的花括号是一种量词(quantifier)。花花括号本身用做元字符。
?也是一种量词表示连字符是可选的,连字符可以不出现或只出现一次。还有其他的量词,例如加号(+)表示“一个或多个”,星号(*)表示“零个或多个”。
懒惰量词在普通量词后面加一个?可以使它匹配最少
占有量词在普通量词后面加一个+
边界
就像^和$一样,\b是一个零宽度断言,表面上它会匹配空格或者是行起始,而实际上它匹配的是不存在的东西。
\B匹配非单词边界。
选择,分组和后向引用
举例:先将一个\d放在一对圆括号中,这样就将它放入了一个分组中,后面可以用\1来对捕获的内容进行后向引用。
(\d)\d\1可以匹配707等前后两个数相等的三位数。
当一模式的全部或则部分内容由一对括号分组时,它就对内容进行捕获并临时存入内存中。可以通过后向引用重用捕获的内容,形式为:\1 或 $1。
(?:x) 匹配’x’但是不记住匹配项。这种被叫做非捕获括号。匹配到的自字符串不能通过数组的[1],...,[n]进行访问。