Javascript 字数计算法
我最近在javascript中为我的网站使用了一种修改过的字数计算方法,这样它就可以计算textarea中的初始字数,但效果并不理想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++)
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