一、校验数字的表达式 数字:^\d*$ 至少m位,至多n位:^\d{m,n}$ 非零开头的最多带两位小数的数字:^[1-9]\d*(.\d{1,2})?$ 带1-2位小数的正数或负数:^(-)?\d+(.\d{1,2})?$ |
正则表达式 说明
1. | ^ | 【开始】 |
$ | 【结束】 | |
2. | {n} | 【n次】 |
{n,} | 【至少n次】 | |
{n,m} | 【n到m次】 | |
3. | ? | 【0到1次】 【{0,1}】 |
+ | 【1到多次】【{1,}】 | |
* | 【0到多次】【{0,}】 | |
? (*?,+?等) | 【非贪婪模式】【该字符紧跟在 (*, +, ?, {n}, {n,}, {n,m}) 后面】 | |
4. | | | 【替换,"或" 优先级小于字符(0|ab 匹配的是"0"或者"ab")】 |
5. | [abc] | 【匹配所包含的任意一个字符】【补充: [-] 【匹配“-”】】 |
[a-c] | 【匹配指定范围内的任意字符】【补充: [1-9] 【匹配"1" "2"..."9"】】 | |
[^abc] | 【匹配未包含的任意字符】 | |
6. | . | 【匹配除 "\n" 之外的任何单个字符】 |
\d | 【等于[0-9]】 【0到9】 |
.*?(非贪婪模式)和.*(贪婪模式)的区别:【回溯】
①.*(贪婪模式)
var str = "<p>This is a test</p>"+"<div>A</div>";
var pattern = /<p>.*<\/p>/i; /*i忽略大小写*/
pattern.test(str);
(贪婪模式)正则表达式匹配顺序:
1."<"、"p"、">"分别先后获取取得控制权,匹配str字符串中的"<p>"。匹配成功后,将控制权交给".*"。
2.".*"获得控制权【'.'匹配除换行符以外的任意字符,'*'这个贪婪量词表示重复零次或多次——匹配尽量多的次数。】
由于".*"为贪婪模式,面对可匹配可不匹配的情况下,优先尝试匹配。从"T"开始,向右匹配,知道匹配到结尾
的">",均匹配成功,由于此时已匹配到字符串str的结尾,所以“.*”结束匹配。将控制权交给正则表达式的"<"
【"</p>"中的"<"】。
3."<"获得控制权,由于已经在字符串str结束位置,匹配失败,向前查找可供回溯的状态,控制权交给".*",由".*"
让出一个字符,也就是字符串str结尾处的">",匹配失败,再次向前查找可供回溯的状态,以此类推,当".*"让出
字符为"<"时,"<"匹配成功将控制权交给"/"。
4."/"获得控制权,向右匹配,"/"匹配成功,将控制权交给"p"。
5."p"获得控制权,向右匹配,匹配失败,向前查找可供回溯的状态,控制权先后交给"/"、"<",无法让出字符,将控
制权交给".*",由".*"让出一个字符,直到".*"让出"<div>"中的"<"时,"<"匹配成功将控制权交给"/"。
6."/"获得控制权,向右匹配,"/"匹配失败,重复以上步骤。当".*"让出"</p>"中的"<"时,"<"匹配成功将控制权交
给"/"。
7."/"获得控制权,向右匹配,匹配成功,将控制权交给"p"。
8."p"获得控制权,向右匹配,匹配成功,将控制权交给">"。
9.">"获得控制权,向右匹配,匹配成功。
10.整个正则表达式匹配成功。
②.*?(非贪婪模式)
var str = "<p>This is a test</p>"+"<div>A</div>";
var pattern = /<p>.*?<\/p>/i; /*i忽略大小写*/
pattern.test(str);
(非贪婪模式)正则表达式匹配顺序:
1."<"、"p"、">"分别先后获取取得控制权,匹配str字符串中的"<p>"。匹配成功后,将控制权交给".*?"。
2.".*?"获得控制权【"?"将正则表达式中的贪婪量词*改为懒惰(又名非贪婪)量词】
由于".*?"为非贪婪模式,面对可匹配可不匹配的情况下,优先尝试不匹配。由于"*"等价于"{0,}",所以在忽略
优先的情况下,可以不匹配任何内容,将控制权交给的"<"。
3."<"获得控制权,向右匹配,匹配str字符串中的"T"失败后,向前查找可供回溯的状态,控制权交给".*?",
由".*?"吃进一个字符,也就是字符串str的"T",再次向右匹配,匹配str字符串中的"h"失败后,再次向前查找可供
回溯的状态,以此类推,当".*?"吃进字符为"<"时,"<"匹配成功将控制权交给"/"。
4."/"获得控制权,向右匹配,"/"匹配成功,将控制权交给"p"。
5."p"获得控制权,向右匹配,匹配成功,将控制权交给">"。
6.">"获得控制权,向右匹配,匹配成功。
7.整个正则表达式匹配成功。