问题描述:

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入门 - 语言基础 - 19.方法

    原文地址:http://www.work100.net/training/java-method.html 更多教程:光束云 - 免费课程 方法 序号 文内章节 视频 1 概述 2 方法的定义 3 方 ...

  2. 基于Bootstrap和Knockout.js的ASP.NET MVC开发实战

    之前在一家公司里用过Knockout,是easyui 和 Knockout结合 的.下面的这本应该不错. 目录 前言 第一部分入门指南 第1章MVC介绍 创建第一个项目 分析HomeControlle ...

  3. C语言寒假大作战02

    2.2.1 寒假大作战 问题 回答 这个作业属于哪个课程 2019软件四班C语言寒假作业大作战 这个作业要求在哪里 作业要求 我在这个课程的目标是 用switch完成一个menu基本框架 这个作业在那 ...

  4. SpringBoot缓存篇Ⅱ --- 整合Redis以及序列化机制

    一.Redis环境搭建 系统默认是使用ConcurrentMapCacheManager,然后获取和创建ConcurrentMapCache类型的缓存组件,再将数据保存在ConcurrentMap中 ...

  5. 虚拟机ubuntu系统怎么添加 VMware tools

    首先弹出光盘 然后安装 点击安装VMware tools 然后进入光盘 打开VMware tools 文件夹 将解压文件拉到桌面上 打开桌面上的文件夹 不选中文件 然后键入下面的内容 输入密码 输入y ...

  6. 一份中规中矩的 iOS笔试题

    一.背景 因为一些原因,我从公司离职,在此之前,我需要帮忙招聘一个新人来做我的工作,于是就有了这篇文章. 由于公司项目16年就已经上线了,前同事写的项目中,有用xib.storyBoard.代码自动布 ...

  7. Ceph 存储集群2-配置:心跳选项、OSD选项、存储池、归置组和 CRUSH 选项

    一.心跳选项 完成基本配置后就可以部署.运行 Ceph 了.执行 ceph health 或 ceph -s 命令时,监视器会报告 Ceph 存储集群的当前状态.监视器通过让各 OSD 自己报告.并接 ...

  8. HotSpot虚拟机对象创建

    2.3.1对象创建 Java是一门面向对象的语言,在Java程序的运行过程中无时无刻都有新的对象被创建出来.从语言的层面看,创建对象通常仅仅是一个new关键字而已,从虚拟机的角度看,创建对象又是怎样的 ...

  9. Codeforces_832

    A.判断n/k的奇偶性. #include<bits/stdc++.h> using namespace std; long long n,k; int main() { ios::syn ...

  10. 一口气说出 9种 分布式ID生成方式,面试官有点懵了

    整理了一些Java方面的架构.面试资料(微服务.集群.分布式.中间件等),有需要的小伙伴可以关注公众号[程序员内点事],无套路自行领取 本文作者:程序员内点事 原文链接:https://mp.weix ...