正则表达式


一、校验数字的表达式

数字:^\d*$
n位的数字:^\d{n}$

至少n位的数字:^\d{n,}$
至少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.整个正则表达式匹配成功。









评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值