用正则表达遇到的问题:
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。