求出字符串中大写字母,小写字母和数字的个数

来源:互联网 发布:php课程简介 编辑:程序博客网 时间:2024/05/16 10:08

用正则表达遇到的问题:

emptyfunction statistic(str){        var result = {"n1":0,"n2":0,"n3":0};//n1:大写个数,n2:小写个数,n3:数字个数        var reg1 = /([A-Z])/g//判断大写的正则表达式        var reg2 = /([a-z])/g//判断小写的正则表达式        var reg3 = /([0-9])/g//判断数字的正则表达式        for(var i in str){            if(reg1.test(str[i])){                result.n1++;                reg1.lastIndex = 0;                continue;            }            if(reg2.test(str[i])){                result.n2++;                reg2.lastIndex = 0;                continue;            }            if(reg3.test(str[i])){                result.n3++;                reg3.lastIndex = 0;            }        }        return result;    }

       当这样用str[i].test(/([A-Z])/g)时,结果没做什么变化,查到资料正则表达式是要在.test前面test后面()里是该字符串,所以定义了三个正则表达式分别判断大写,小写和数字,再把if里的条件都改为reg1.test(str[i])
      方法 RegExp.exec( ) 和 RegExp.test( ) 找到的,它们都以 lastIndex 属性所指的位置作为下次检索的起始点。比如abc,从a开始判断,第二次就从b开始判断,之前的a就不再进行判断,后来查了有两种解决方案:
      ① reg1.lastIndex = 0;方法 exec() 或 test() 再也找不到可以匹配的文本时,它们会自动把 lastIndex 属性重置为 0。
      ②直接去掉 g 标签

lastIndex属性必须配合g使用,不然就不要用g字母,小写字母和数字的个数。

lastIndex属性是可读可写的。只要目标字符串的下一次搜索开始,就可以对它进行设置。当方法 exec() 或 test() 再也找不到可以匹配的文本时,它们会自动把 lastIndex 属性重置为 0。

重要事项:不具有标志 g 和不表示全局模式的 RegExp 对象不能使用 lastIndex 属性。

提示:如果在成功地匹配了某个字符串之后就开始检索另一个新的字符串,需要手动地把这个属性设置为 0。


阅读全文
0 0