mishe / blog

前端碰上的问题或体会
230 stars 39 forks source link

用一个正则表达式来计算一个字符串中有多少个英文字符 #146

Open mishe opened 7 years ago

mishe commented 7 years ago

前段时间,在面试一个资深前端开发时,偶然想到了一道面试题:用一个正则表达式来计算一个字符串中有多少个英文字符。

首先把面试题简化下

怎样在一个字符串中找到指定的字符

str.search

var str='1a2b3c4d5ef';
str.search('a')   

str.indexOf

var str=‘1a2b3c4d5ef’;
str.indexOf('a')  

str.match

var str=‘1a2b3c4d5ef’;
str.match('a')

怎样在一个字符串中找到指定字符的个数

for/while等循环

var str='1a2b3c4d5ef',
     num=0;
for(var i=0;i<str.length;i++){
  if(str.charAt(i)=='a'){
    num+=1;
  }
}

str.split

var str='1a2b3c4d5ef';
str.split('a').length-1

str.match

var str='1a2b3c4d5ef';
str.split('a').match(/a/ig).length

怎样在一个字符串中找到英文字符(特定区间的条件)的个数

for/while等循环可以实现

str.split 同样可以实现,str.match也可以实现,两者基本没有差别,都是依靠正则表达式的能力;

那么正则表达式要怎么写呢?

其实很简单,英文的区间是a-z,那么只要能选中每一个英文就好,正则是/[a-z]{1}/,选择后,需要记录,那么变成了/([a-z]{1})/,英文是区分大小写的/([a-z]{1})/i,需要全局查找匹配,最终的正则:/([a-z]{1})/ig