我正在为Web应用程序类进行实验室分配,并且坚持为基本HTML网页实现字计数器。测试和HTML的设置已经为我们完成。我只需要编写一个称为countWords的函数即可,该函数接受一个字符串并返回单词数。但是,它的工作方式不同于传统的字计数器。单词定义为A-Z。其他所有内容都不是单词的一部分。因此,如果字符串只是"234@#$^"
,则字数为0。因此,我不像大多数字计数器那样仅对空格进行计数。我在StackOverflow上找到的所有类似问题的答案都试图仅计算空格,而不适合我的情况。因此,我为什么要提出一个新问题。
我的想法是要有一个使用正则表达式匹配任何a-z分组的return语句,并返回长度。然后,有条件检查空字符串或没有字母a-z的字符串。
function countWords(s) {
if(s === "" || s === "%$#^23#") {
return 0
}
return s.match(/[^a-z]/gi).length
}
现在,if语句仅与两个测试用例匹配,以便我可以通过测试。我不确定如何编写另一个匹配正则表达式来检查字符串或空字符串中是否没有字母。任何帮助表示赞赏!卡了一段时间。
答案 0 :(得分:0)
您首先需要过滤string
,删除所有特殊字符和数字:
var filtered_test = my_text.replace(/[^a-zA-Z ]/g, '');
然后执行正常的split
并计数:
var words = filtered_test.split(" ");
console.log(words.length); //prints out the count of words
答案 1 :(得分:0)
该正则表达式如何:/.*?[a-z]+.*?(\s|$)/gi
使用return s.match(/.*?[a-z]+.*?(\s|$)/gi).length
其中至少包含1个字母的任何事物都将被计数。然后,短语O##ne two $#!+ @#%Three four^&&$ five
将计为5个单词。
编辑:如果您想在有0个匹配项的情况下通过测试用例,请使用(input.match(/.*?[a-z]+.*?(\s|$)/gi) || "").length
答案 2 :(得分:0)
您可以使用功能性的替换方法将所有“单词”分块为一个数组,然后简单地返回数组长度。这具有提供0
计数的额外好处:
解释性版本:
function countWords(str, words = []) {
str.replace(/[A-Z]+/gi, (m) => words.push(m));
return words.length;
}
最低版本:
let countWords = (str, words = []) =>
( str.replace(/[A-Z]+/gi, (m) => words.push(m)), words.length );
let countWords = (str, words = []) => (str.replace(/[A-Z]+/gi, (m) => words.push(m)), words.length);
console.log( "##asdfadf###asfadf: " + countWords("##asdfadf###asfadf") )
console.log("##13424#$#$#$%: " + countWords("##13424#$#$#$%"));