首页 > 解决方案 > javascript中的单词计数器

问题描述

我正在为一个 Web 应用程序课程做一个实验室作业,并且一直在为一个基本的 HTML 网页实现一个单词计数器。测试和 HTML 的设置已经为我们完成。我只需要编写一个名为 countWords 的函数,它接受一个字符串并返回单词的数量。不过,它的工作方式与您的传统单词计数器不同。一个词被定义为任何 AZ。其他一切都被认为不是单词的一部分。所以,如果字符串只是"234@#$^"那么字数为 0。所以,我不只是像大多数字计数器一样计算空格。我在 StackOverflow 上找到的所有类似问题的答案都试图只计算空白,不适用于我的情况。因此,我提出了一个新问题。

我的想法是有一个返回语句,它使用正则表达式匹配任何 az 分组并返回长度。然后,有一个条件来检查空字符串或没有字母 az 的字符串。

function countWords(s) {
   if(s === "" || s === "%$#^23#") {
      return 0
   }
   return s.match(/[^a-z]/gi).length
}

现在 if 语句只是匹配两个测试用例,这样我就可以通过我的测试。我不确定如何编写另一个匹配正则表达式来检查字符串中是否没有字母或空字符串。任何帮助表示赞赏!卡了一段时间。

标签: javascriptregexstring

解决方案


const str1 = '%$#^23#';
const str2 = 'String with  ___ special characters and @$&# white spaces  !!!';
const str3 = 'Special &$%# characters --> and %$#^5# connected,words but our <++@@||++> function,still_works!';

const wordCount = (str) => str.replace(/[\W_\d]/g,' ').split(' ').filter(Boolean).length;

console.log(wordCount(str1)); // 0
console.log(wordCount(str2)); // 7
console.log(wordCount(str3)); // 11
  1. 使用“正则表达式”将所有特殊字符、下划线、数字和多余的空格替换为空格

    --> 替换(/[\W_\d]/g,' ')

  2. 将字符串转换为数组

    --> .split(' ')

  3. 使用过滤器删除数组中的所有空字符串

    --> .filter(布尔值)

  4. 然后,用“长度”获取字数

    --> .长度


推荐阅读