问题描述:

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. typedef声明变量也是一种求值过程

    前言: 什么叫做:声明变量是求值过程?请看下面的声明, int i; 很简单,声明了个整型变量i,再看如下声明, int *p; 也很简单,立刻反应出来它是指向整型的指针,但是具体如何推倒出来的呢?其 ...

  2. python常用内置模块-random模块

    random模块:用于生成随机数 '''关于数据类型序列相关,参照https://www.cnblogs.com/yyds/p/6123692.html''' random() 随机获取0 到1 之间 ...

  3. linux DHCP 服务器

    配置  1:/etc/dhcp.conf 配置文件 2:dhcp.leases 启动 dhcp 服务器 linux dhcp客户端 windows dhcp 客户端

  4. AVLTree(C++实现)没有统一旋转操作

    最近疫情比较严重,只能在家里休息,利用休息之余,我用C++把AVL树实现了一遍 大学老师只讲一些比较简单的数据结构和算法,这些高级数据结构还是需要自己主动学习并且动手来实现的, 从前只听说过AVLTr ...

  5. Docker基础内容之命令大全

    run(未补全) 说明:创建一个新的容器并运行一个命令 语法如下: docker run [OPTIONS] IMAGE [COMMAND] [ARG...] 选项说明: -a stdin: 指定标准 ...

  6. linux系统下gdb的简单调试

    当我们写完程序后,我们会运行程序,在这个过程中,可能程序会出现错误. 我们可以利用gdb调试去看我们运行的程序,并且我们新手通过gdb调试能更好地去读懂 别人的程序.让我们更好的学习. 我们看下面这条 ...

  7. Linux服务器上python2升为python3.6

    如何在在Linux服务器上吧Python2升级为Python3 最近白嫖了一年的服务器,打算在服务器上跑一个Python项目,没想到居然预装的是Python2.7.5.本来是打算把Python2.7. ...

  8. 视觉slam十四讲第七章课后习题6

    版权声明:本文为博主原创文章,转载请注明出处: http://www.cnblogs.com/newneul/p/8545450.html 6.在PnP优化中,将第一个相机的观测也考虑进来,程序应如何 ...

  9. 用Go语言在Linux下调用新中新DKQ-A16D读卡器,读二代证数据

    1.背景 前几天用Python在Linux下成功的获取了二代证数据,最近正在学Go语言,这两天想着用Go语言也实现一下试看看. 2.开搞C++ 这次就比较简单了,直接把CppDemo里面的SynRea ...

  10. HDU_3853_区间dp

    http://acm.hdu.edu.cn/showproblem.php?pid=3853 dp[i][j]表示由空白串刷成b的从i到j位所需要的最小次数. 然后在比较a和b的每一位,再次更新dp表 ...