day-17.4 正则表达式-量词

量词:在正则中某一个同样的规则重复出现的次数, 称为量词;

举例

1 var str = "123 4";
2 var reg = /\d\d\d\d/;
3 var reg2 = /\d\d\d/;
4 var reg3 = /\d{3}/;
5 var reg4 = /\d\d/;
6 console.log(reg.test(str));//输出false;因为只有3个数字相连,这里表示的是相连,而不是总共有几个数字;
7 console.log(reg2.test(str)); //输出true;
8 console.log(reg3.test(str)); //输出true;
9 console.log(reg4.test(str));//输出true;有2个数字相连;

 

基础量词的写法:

{n} ; n个重复出现的规则;

{n,m} ;最少n个,最多m个,重复出现数量在n-m这个区间,也就是在n和m这个区间;

1 var str = "1234567890";
2 var reg1 = /\d{2,4}/; //用以匹配的正则规则是满足2到4个之间的任何一个;这里可以说是都满足;
3 var reg2 = /\d{2,15}/;//用以匹配的正则规则是满足2到15个之间的任何一个;这里可以说是满足了2-10;
4 var reg3 = /\d{11,12}/;//用以匹配的规则是11-12;这里没有一个是满足的;
5 console.log(reg1.test(str)); //10个满足2到4个,所以是true;
6 console.log(reg2.test(str));//10个满足2到10个,所以是true;
7 console.log(reg3.test(str));//10个不满足11-12,所以是false;
这里也可以看出
规则变量.test(\d{n,m});这个函数,其实就是一个有正则规则为条件连续判断的函数,当有真时停止判断,返回真;

{n,} ; 最少n个,最大没有限制;

特殊量词的简写(这3个符号都为特殊字符,如果想要在代码中使用原符号,要加转义符):

{1,}     +       //最小一个,最大无限个

+号正则的写法:

1 <script>
2     var str = "12345abcd67890"; 
3     var reg = /\d+/; 
4     console.log(str.match(reg));
5 </script>

{0,1}   ?       //要么0 ,要么1个;

{0,}     *       //要么0,要么匹配无限个(也就是有没有,都能匹配);

 

量词的特性:贪婪和惰性

量词默认具有贪婪属性,即

1 var str = "123123dafa1235";
2 var reg1 = /\d{2,}/ ; 
3 var reg2 = /\d{2,}?/;加个问好,表示惰性匹配;
4 console.log(str.match(reg1));//会输出123123这个数组,因为量词默认贪婪匹配;
5 console.log(str.match(reg2)) ; //会输出12这个数组,因为通过问号,将量词的特性修改为惰性,即最少匹配;

 

除了test的匹配方法之外还有match匹配,

不同于test匹配,match匹配有以下两个特点;

1、使用match这个函数的对象是源字符串变量,而不是正则规则变量;

2、match匹配返回的是按照正则规则从源字符串截取的数组;而不是bool值;

例如:

 1 var str = "1234567890haha0987654321";
 2 var reg1 = /\d{1,3}/;
 3 var reg2 = /\d{3}/;
 4 var reg3 = /\d{3,}/;
 5 var reg4 = /\d{4,5}/;
 6 var reg5 = /\d{0,}/;  //也可以写成 reg5 = /\d*/;
 7 console.log(reg1.test(str));//输出true;
 8 console.log(str.match(reg1));//输出一个内容为123的数组;
 9 console.log(str.match(reg2));//输出一个内容为123的数组;
10 console.log(str.match(reg3));//输出一个内容为1234567890的数组;
11 console.log(str.match(reg4));//输出一个内容为12345的数组;
12 console.log(str.match(reg5));//输出一个内容为123457890的数组;
13 
14 //可以看到一个特点,就是 源字符串变量.match(正则变量);截取的数组都是往规则的最大数量去截取,比如{1,3}截取3位,{4,5}截取5位,{3,}截取完一直到1234567890;

 

posted @ 2018-08-15 10:49  bibiguo  阅读(117)  评论(0)    收藏  举报