问题描述:

Return the number (count) of vowels in the given string.

We will consider a, e, i, o, and u as vowels for this Kata.

The input string will only consist of lower case letters and/or spaces.

 function getCount(str) {
var vowelsCount = 0; // enter your majic here return vowelsCount;
}

我的答案:

 function getCount(str) {
var vowelsCount = 0; // enter your majic here
var a=str.split("");
for (var i=0;i<a.length;i++){
if(a[i]=="a" || a[i]=="e" || a[i]=="i" || a[i]=="o" || a[i]=="u"){
vowelsCount+=1;
}
}
return vowelsCount;
}

对于本题,虽然想用string.match做,但是发现自己的正则不会,于是就选用了最原始的,逐个判断是不是元音。想哭!后来发现也有大神没有用match正则做,也可以。

优秀答案:

 function getCount(str) {
let vowels = ['a','e','i','o','u'];
return str.split('').filter(letter => {
return vowels.includes(letter)? true : false;
}).length;
}

这是暂时排名第一的答案:(和我的想法一致,(#^.^#),但是我也写不成这么精简的一行)

 function getCount(str) {
return (str.match(/[aeiou]/ig)||[]).length;
}

不过大神们,你们这样真的好吗?

补一波前面欠下的正则的债。

可用到正则的String方法 用法
match match(regexp);返回符合规则的内容,格式为数组;失败为null
search search(regexp);返回符合规则的内容第一次出现的位置;失败为-1
replace replace(regexp,newvalue);查找渡河正则的字符串,替换为newvalue;返回替换后的内容

以下总结参考
http://deerchao.net/tutorials/regex/regex.htm

http://www.jb51.net/article/110516.htm

    1. 元字符

      元字符 含义
      . 匹配除换行符之外的任意字符
      \w 匹配字母或数字或下划线或汉字
      \s 匹配任意的空白符space
      \d 匹配任意的数字digit
      \b   匹配单词的开始或结束
      ^ 匹配字符串的开始
      $ 匹配字符串的结束
  1. 转义字符
    转义字符 含义
    \. 对应字符 .
    \* 对应字符 *
    \\ 对应字符 \
  2. 重复
    重复字符 含义
    * 重复>=0
    + 重复>=1
    ? 重复0或1次
    {n} 重复n次
    {n,m} 重复n到m次,包含n和m
    {n,} 重复>=n
  3. 字符类
    匹配预设元素[ ] 含义
    [aeiou] 匹配一个英文元音字母
    [.!?] 匹配符号(. ! ?)
    [0-9] 匹配任意数字,同 \d
    [a-zA-Z0-9] 匹配任意数字字母,同 \w
  4. 反义
    元字符 含义
    \W 匹配不是字母或数字或下划线或汉字的字符
    \S 匹配任意不是空白符的字符
    \D 匹配任意非数字的字符
    \B   匹配不是单词的开始或结束的位置
    [^x] 匹配除了x以外的字符串
    [^aeiou] 匹配除aeiou以外的任意字符
  5. 修饰符
    修饰符 含义
    g 全局匹配
    i 不区分大小
    m 多行模式,会改变^ $行为
  6. JS创建正则
    (1)var exp=/ pattern / flags;   //其中pattern是正则表达式,flags是修饰符
    例: var p=/ \b[aeiou][a-z]+\b/gi /;

    (2)var pattern= new RegExp("\\b[aeiou][a-z]+\\b","gi");

  7. JS匹配提取exec()
    var matches=pattern.exec(str);   //返回:结果数组或null
    结果数组有两个属性,index表示匹配项所在字符串的位置; input表示源字符串
    matches[0]表示匹配整个正则的第一个捕获的匹配的字符串;;;matches[n] 表示匹配整个正则的第n个捕获的匹配的字符串

    例如: var pattern=/ \b([a-zA-Z]+)ing\b /g;
    var str="reading and writing";
    则matches=pattern.exec(str);   // matches.index为0时,matches[0]: reading   matches[1]: read
    // matches.index为12时,matches[0]: writing   matches[1]: writ

  8. JS匹配成功与否test()
    var result=pattern.test(str);   //返回:找到匹配项,返回true,否则false
  9. 应用正则和思路
    凡是和“找”有关的。而且是字符串的
    两类应用正则问题
    (1)验证类问题
    (2)搜索、提取、替换类问题

codewars--js--vowels counting+js正则相关知识的更多相关文章

  1. js中错误处理的相关知识

    错误bug是指程序执行过程中,导致程序无法正常执行的情况. 后果:程序会强行中断退出:     错误处理:                即使程序出现错误,也保证程序不异常中断的机制. 一般的使用的代 ...

  2. js中字符串和正则相关的方法

    正则表达式对象常用方法 test() 检索字符串中指定的值.返回 true 或 false. var str="Embrace You" var r1=/you/i.test(st ...

  3. JS作用域相关知识(#精)

    在学习<你不知道的JS>一书中,特将作用域相关知识在此分享一下: #说到作用域,就不得不提到LHS查询和RHS查询: 1)如果查询目的是对变量进行赋值,则使用LHS查询 2)如果查询目的是 ...

  4. [小问题笔记(六)] 解决JS已执行,输出内容乱码问题. 顺带总结编码相关知识

    问题: JS输出的内容出现了乱码.如图: 分析:既然年和月的数字可以正常显示,证明js加载和执行都没有问题 解决:把js引用处的编码方式改成当前页面编码一致.charset="gb2312& ...

  5. Vue.js 相关知识(动画)

    1. 简介 Vue 在插入.更新或移除 DOM 时,提供多种不同方式的过渡效果,并提供 transition 组件来实现动画效果(用 transition 组件将需执行过渡效果的元素包裹) 语法:&l ...

  6. js 面试题正则相关

    正则相关[i不区分大小写,g匹配全部数据] var str = "Hello word! I think word is good."; 1.替换str中的word为javascr ...

  7. Dynamic CRM 2013学习笔记(二十三)CRM JS智能提示(CRM 相关的方法、属性以及页面字段),及发布前调试

    我们知道在CRM的js文件里引用XrmPageTemplate.js后,就可以实现智能提示,但每个js文件都引用太麻烦了,其实可以利用vs的功能让每个js文件自动实现智能提示CRM的js: 另外,我们 ...

  8. js和HTML结合(补充知识:如何防止文件缓存的js代码)

    来自<javascript高级程序设计 第三版:作者Nicholas C. Zakas>的学习笔记(二) 使用html标签<script>可以把js嵌入到html页面中,让脚本 ...

  9. JS -- 一篇文章掌握RequireJS常用知识

    本文采取循序渐进的方式,从理论到实践,从RequireJS官方API文档中,总结出在使用RequireJS过程中最常用的一些用法,并对文档中不够清晰具体的内容,加以例证和分析,分享给大家供大家参考,具 ...

随机推荐

  1. Java入门 - 语言基础 - 18.正则表达式

    原文地址:http://www.work100.net/training/java-regular-expression.html 更多教程:光束云 - 免费课程 正则表达式 序号 文内章节 视频 1 ...

  2. Manipulating Data from Oracle Object Storage to ADW with Oracle Data Integrator (ODI)

    0. Introduction and Prerequisites This article presents an overview on how to use Oracle Data Integr ...

  3. python 封装底层实现原理

    事实上,python封装特性的实现纯属"投机取巧",之所以类对象无法直接调用私有方法和属性,是因为底层实现时,python偷偷改变了它们的名称. python在底层实现时,将它们的 ...

  4. NHibernate 初识(0)

    参考资料: http://nhibernate.info/

  5. 创建dynamics CRM client-side (二) - Client API

    如果我们想用script来直接在form上做一些修改, 我们需要用到client api 来做交互. 我们可以用以下来理解: Form <---> Client API <---&g ...

  6. Selenium(一):元素定位

    一.Selenium 8种定位方式 baidu.html <form id="form" name="f" action="/s" c ...

  7. Docker三剑客之compose

    简介 Compose 项目是 Docker 官方的开源项目,负责实现对 Docker 容器集群的快速编排.从功能上看,跟 OpenStack 中的 Heat 十分类似.其代码目前在 https://g ...

  8. map实现单词转换程序的例子

    代码来源于c++ primer 10.3 功能:已知一个一一对应的词典,求一小段文档对应的“翻译” 词典如下: A a B b C c D d E e 输入: D D E 代码: //需要两个文件,一 ...

  9. CUDA学习(四)之使用全局内存进行归约求和(一个包含N个线程的线程块)

    问题:使用CUDA进行数组元素归约求和,归约求和的思想是每次循环取半. 详细过程如下: 假设有一个包含8个元素的数组,索引下标从0到7,现通过3次循环相加得到这8个元素的和,使用一个间隔变量,该间隔变 ...

  10. 学习Qt的资源-网站、论坛、博客等

    来自<零基础学Qt 4编程>一书的附录 附录C Qt资源 C.1 Qt 官方资源 全球各大公司以及独立开发人员每天都在加入 Qt 的开发社区.他们已经认识到了Qt 的架构本身便可加快应用程 ...