用一个正则表达式来计算一个字符串中有多少个英文字符
nzmw4668
8年前
<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>