前言:正则表达式(regular expression)反反复复学了多次,学了又忘,忘了又学,这次打算把基本的东西都整理出来,加强记忆,也方便下次查询。
学习正则表达式之前首先需要掌握记忆这些基本概念:
1.元字符:(.,\w,\W,\d,\D,\s,/S,^,$,)
. 匹配除了换行符以外的任意字符。
\s 代表任意空白符(换行符,制表符,空格)
\S 匹配任意非空字符串
\b 匹配单词边界,匹配单词的开头和结尾。
\B 匹配一个非单词边界
\d 匹配一个数字,等价于[0-9]
\D 匹配一个数字,等价于[^0-9]
\w 匹配一个单字字符(字母、数字或者下划线)等价于[A-Za-z0-9_],例如, /\w/ 匹配 "apple," 中的 \'a\',"$5.28,"中的 \'5\' 和 "3D." 中的 \'3\'。 \W匹配一个非单字字符。等价于[^A-Za-z0-9_],例如, /\W/ 或者 /[^A-Za-z0-9_]/ 匹配 "50%." 中的 \'%\'。
\W 匹配一个非单字字符。等价于[^A-Za-z0-9_],例如, /\W/ 或者 /[^A-Za-z0-9_]/ 匹配 "50%." 中的 \'%\'。
^ 匹配字符串的开始用在[]括号里面表示排除,/^A/ 并不会匹配 "an A" 中的 \'A\',但是会匹配 "An E" 中的 \'A\'。
$ 匹配字符串的结束。例如,/t$/ 并不会匹配 "eater" 中的 \'t\',但是会匹配 "eat" 中的 \'t\'。 QQ号必须为5位到12位数字时,可以使用:^\d{5,12}$
我们发现\W加大写字母都是表示相反的意思。
2.分组符([],(),{});
字符含义() 如果想要重复多个字符该怎么办?你可以用小括号来指定子表达式(也叫做分组),然后你就可以指定这个子表达式的重复次数了。eg: (\d{1,3}\.){3}\d{1,3}是一个简单的IP地址匹配表达式。要理解这个表达式,请按下列顺序分析它:\d{1,3}匹配1到3位的数字,(\d{1,3}\.){3}匹配三位数字加上一个英文句号(这个整体也就是这个分组)重复3次,最后再加上一个一到三位的数字(\d{1,3})。
[] 代表一个字符集合。匹配方括号的中任意字符,包括转义序列。你可以使用破折号(-)来指定一个字符范围。对于点(.)和星号(*)这样的特殊符号在一个字符集中没有特殊的意义。他们不必进行转义,不过转义也是起作用的。例如,[abcd] 和[a-d]是一样的。他们都匹配"brisket"中得‘b’,也都匹配“city”中的‘c’。/[a-z.]+/ 和/[\w.]+/都匹配“test.i.ng”中得所有字符。
{} 表示量词的范围的。
3.修饰符(i,g,m);
字符含义i 忽略大小写
g 执行全局匹配
m 执行多行匹配
4.量词(*,?,+,-,{n,m},?=n,?!=n);
字符含义* 匹配任意次,.*连在一起就意味着任意数量的不包含换行的字符。等价于{0,}
+ 匹配前面一个表达式1次或者多次。等价于 {1,}。
? 匹配前面一个表达式0次或者1次。等价于 {0,1}。
{n,m} 匹配n到m次
x(?=y) 匹配\'x\'仅仅当\'x\'后面跟着\'y\'.这种叫做正向肯定查找。 例如,/Jack(?=Sprat)/会匹配到\'Jack\'仅仅当它后面跟着\'Sprat\'。/Jack(?=Sprat|Frost)/匹配‘Jack’仅仅当它后面跟着\'Sprat\'或者是‘Frost’。但是‘Sprat’和‘Frost’都不是匹配结果的一部分。
x(?!y) 匹配\'x\'仅仅当\'x\'后面不跟着\'y\',这个叫做正向否定查找。 例如,/\d+(?!\.)/匹配一个数字仅仅当这个数字后面没有跟小数点的时候。正则表达式/\d+(?!\.)/.exec("3.141")匹配‘141’但是不是‘3.141’