Javascript 我想数一数字符串中的每个单词,但跳过其中包含特殊字符或数字的单词。ex(“j9[”和“h5”)将被跳过

Javascript 我想数一数字符串中的每个单词,但跳过其中包含特殊字符或数字的单词。ex(“j9[”和“h5”)将被跳过,javascript,regex,Javascript,Regex,每个单词都是一系列字母('a-a-Z),可能包含一个或多个连字符,并可能以标点符号句点结尾)、逗号()、问号(?)或感叹号(1)。单词将由一个或多个空格字符分隔。连字符将两个单词连成一个,应保留连字符,而其他标点符号应去除 这是我的密码: function howMany(sentence) { sentence = sentence.replace(/(^\s*)|(\s*$)/gi,""); sentence = sentence.repla

每个单词都是一系列字母('a-a-Z),可能包含一个或多个连字符,并可能以标点符号句点结尾)、逗号()、问号(?)或感叹号(1)。单词将由一个或多个空格字符分隔。连字符将两个单词连成一个,应保留连字符,而其他标点符号应去除

这是我的密码:

function howMany(sentence) {
   
    sentence = sentence.replace(/(^\s*)|(\s*$)/gi,"");
  
    sentence = sentence.replace(/[0-9 ]{2,} /gi," ");
 
    sentence = sentence.replace(/\n /, "/n");

    return sentence.split(' ').length;
}
console.log(howMany("b? Dl )B 4(V! A. MK, YtG ](f 1m )CNxuNUR {PG? "))
预期输出为5,我的输出为11,您可以使用

函数多少(句){
返回语句.split(/\s+/).filter(函数(x){
返回/^[A-Za-z]+(?:-[A-Za-z]+)*[,;:?!]?$/.test(x);
}).长度;
}

console.log(多少?)b4(V!A.MK,YtG)(f 1m)CNxuNUR{PG?)
谢谢。我更新了帖子。希望它现在更有意义。关于诸如“不要”之类的缩略词或诸如“U.S.A.”之类的首字母缩略词呢?另外,如果写了一个引用的句子呢?比如“你能想象的一切都是真实的。”-毕加索
函数Howmount(句子){return-station.split(/\s++/).filter(函数(x){return/^[A-Za-z]+(?:-[A-Za-z]+)*[,;:?!]?$/.test(x);}.length;}
缩略词和首字母缩略词算作一个词。引号将被拆分,连字符不会像这样算作“你能”“想象”“的一切”“都是”“真实的。”“毕加索”您好,维克托尔,很抱歉让您失望,但我没有否决您的答案;但是,我确实忘记了投票。老实说,我不认为我曾否决过您的任何答案。他们总是富有洞察力和直接性,如果我不同意或需要澄清,我总是发表评论,因为您的反应非常积极。OP在评论中明确指出,合同和cronyms算作一个词,但您的解决方案不算作
美国
这样的词,所以这可能是我对否决票的猜测。@MonkeyZeus谢谢。我从OP开始就用这个解决方案发布了这个答案,我通常不会提供更多需要的内容。当然,我们可以在当前模式和我们的基础上添加替代方案e
/^(?[A-Za-z]+(?:[-'][A-Za-z]+)*[,;:?!]?[A-z](?:\.[A-z])+)\.?$/
或类似的东西,但这已经是一些猜测工作了,我想保持在问题顶部列出的当前要求范围内。我完全理解。这就是为什么我删除了我的答案,而不是等待OP猜测他们真正想要什么:-)