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

用正则表达遇到的问题:

empty
function 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
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值