Javascript 字数计算法

Javascript 字数计算法,javascript,Javascript,我最近在javascript中为我的网站使用了一种修改过的字数计算方法,这样它就可以计算textarea中的初始字数,但效果并不理想 function wordCounter(field,countfield) { var maxlimit = 200; var wordcounter = maxlimit - information.value.split(' ').length; for (x = 0; x < field.value.length; x++)

我最近在javascript中为我的网站使用了一种修改过的字数计算方法,这样它就可以计算textarea中的初始字数,但效果并不理想

function wordCounter(field,countfield)
{
    var maxlimit = 200;
    var wordcounter = maxlimit - information.value.split(' ').length;
    for (x = 0; x < field.value.length; x++) 
    {
        if(field.value.charAt(x) == " " && field.value.charAt(x-1) != " ") // Counts the spaces while ignoring double spaces, usually one in between each word.
        {
            wordcounter++ 
        }

        if (wordcounter > 250) 
        {
            field.value = field.value.substring(0, x);
        }
        else
        {
            countfield.value = maxlimit - wordcounter;
        }
    }
}

简单的方法是计算空格的数量,然后加1

编辑:添加示例

这基本上就是这样。按空格分割

var str = 'adfs asdf a asdf';
alert(str.split(/\s+/).length);

一个更简单的方法是使用。

最简单的解决方案是计算非连续空格字符、空格、制表符等的数量,再加上一个

正则表达式:

\S\s
JavaScript:

var str = "The fox jumped over the lazy dog.";
var wordcount = str.match(/\S\s/g).length + 1;
请注意,我没有使用\s+,因为我不需要匹配所有空格,只需要匹配非空格后面的空格字符。这有两个好处:

当字符串有许多重复的空白字符时,开销会稍微小一些。 如果输入以空格开头,则不会在计数中返回额外的单词。 这里的许多答案都使用split。拆分的唯一好处是不必在答案中添加1,但是IMHO,match是更好的答案,因为代码更可读。代码的目的是查找单词边界,而不是拆分单词

此外,尽管match和split返回数组,match的内存开销较小,原因有二:

少一个元素没什么大不了的 它在每个数组元素中只返回两个字符,可能是有效的
给定字符串s,可以执行以下操作:

var numWords = s.replace(/^\s+|\s+$/g,"").split(/\s+/).length;
这将在所有空格、空格、换行符等处拆分字符串,还可以处理多个空格等。编辑:添加内联修剪以从开始/结束处剥离空格

x=a b f d;警报“x已”+ x、 拆分/\s+/.length+“单词”


我不确定我是否理解您到底需要什么您粘贴的代码让我有点困惑,但这里有一个简单的单词计数函数:

var text = "1 2 3 4000";

function wordCounter( text ) {
    word_count = text.split(" ");

    return word_count.length;
}

wordCounter( text );    // returns 4 as expected

正则表达式中有一个分词匹配,可以搜索任何作为单词边界的内容,不仅仅是空格,还有标点符号

因此:


然而,这也打破了',这也算是一个边界,所以如果你想处理所有格撇号,你也需要对它们进行解释,要么去掉它们,要么将它们包含在单词match中,比如[\w |']+。

Well,并在最终结果中添加1-您甚至可以对此进行优化,以避免多个空格被视为更多的单词。当然,这将是一个简单的问题,搜索字符串并用替换空格替换下划线。当处理多个空间的所有实例时,计算空间数。当然,这并不完美,但自动字数统计通常只是一个不错的近似值。这不会在制表符、CR、LF等上拆分,但如果OP处理的是多行文本,则应该这样做。如果单词或句子之间使用多个空格,这也会给出错误的答案。句号后两个空格是一些人常见的不幸习惯。啊,是的,天啊,我的错。不管怎样,正则表达式的版本更简单更干净。出于某种奇怪的原因,无论我使用什么解决方案,它都会在计数中增加两个,而不是一个小问题:如果输入用空格字符填充,这会夸大单词计数。richardtallent-谢谢你的评论,正确,添加了内联修剪来修复。你最好先检查s是否为空字符串。在这种情况下,split函数将返回一个包含一个空字符串的数组,这样你将得到1个单词计数,而不是正确的零值。我更喜欢split版本,因为它在语义上更令人愉悦,它真的计算单词,你不必理解为什么最后有+1。此外,如果字符串正确填充了空格,则此代码会给出错误的结果。
const wordCount = 
    'the quick,brown fox jumped over the lazy dog.'.match(/\b\w+\b/gi).length + 1