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

nzmw4668 7年前
   <p>前段时间,在面试一个资深前端开发时,偶然想到了一道面试题:用一个正则表达式来计算一个字符串中有多少个英文字符。</p>    <h2><strong>首先把面试题简化下</strong></h2>    <h3><strong>怎样在一个字符串中找到指定的字符</strong></h3>    <p>str.search</p>    <pre>  <code class="language-javascript">var str='1a2b3c4d5ef';  str.search('a')</code></pre>    <p>str.indexOf</p>    <pre>  <code class="language-javascript">var str=‘1a2b3c4d5ef’;  str.indexOf('a')</code></pre>    <p>str.match</p>    <pre>  <code class="language-javascript">var str=‘1a2b3c4d5ef’;  str.match('a')</code></pre>    <h3><strong>怎样在一个字符串中找到指定字符的个数</strong></h3>    <p>for/while等循环</p>    <pre>  <code class="language-javascript">var str='1a2b3c4d5ef',       num=0;  for(var i=0;i<str.length;i++){    if(str.charAt(i)=='a'){      num+=1;    }  }</code></pre>    <p>str.split</p>    <pre>  <code class="language-javascript">var str='1a2b3c4d5ef';  str.split('a').length-1</code></pre>    <p>str.match</p>    <pre>  <code class="language-javascript">var str='1a2b3c4d5ef';  str.split('a').match(/a/ig).length</code></pre>    <h3><strong>怎样在一个字符串中找到英文字符(特定区间的条件)的个数</strong></h3>    <p>for/while等循环可以实现</p>    <p>str.split 同样可以实现,str.match也可以实现,两者基本没有差别,都是依靠正则表达式的能力;</p>    <p>那么正则表达式要怎么写呢?</p>    <p>其实很简单,英文的区间是a-z,那么只要能选中每一个英文就好,正则是/[a-z]{1}/,选择后,需要记录,那么变成了/([a-z]{1})/,英文是区分大小写的/([a-z]{1})/i,需要全局查找匹配,最终的正则:/([a-z]{1})/ig</p>    <p> </p>    <p>来自:https://github.com/mishe/blog/issues/146</p>    <p> </p>