获取textarea的统计信息(单词,行,字符)

时间:2013-10-26 06:24:28

标签: javascript

我想计算文本区域的单词,字符和行数。 这是我的代码: 这样做是否完美?

function getStats() {
  var text = textarea.value,
    chars = text.length,
    words = text.split(/\S+/g).length - 1,
    lines = text.split("\n").length;
  return lines + " lines, " + words + " words, " + chars + " chars";
}

有任何更正吗?

4 个答案:

答案 0 :(得分:5)

function getStats() {
  var text = textarea.value,
    chars = text.length,
    words = text.split(/\s+/g).length,
    lines = text.split("\n").length;
  return lines + " lines, " + words + " words, " + chars + " chars";
}

上面的代码工作正常。您可以通过以下方式优化代码:

   words = text.split(/s+/g).length 

而不是

  words = text.split(/S+/g).length - 1;

答案 1 :(得分:5)

虽然它可能正常工作,但是你做事的方式还有一些天生的问题。

首先,您使用的是全局变量(或者至少不是局部变量)。您的函数依赖于textarea变量,该变量在函数外部定义,因此不灵活且难以测试。相反,为什么不接受textarea元素来检查?或者甚至更好,而不是在元素上操作,操作字符串?这在概念上会更有意义(统计数据不是元素,而是价值),并创建更灵活的代码。

其次,你的功能含糊不清。 getStats?获取的内容的统计信息?这些统计数据是什么?他们是24岁男性的平均身高吗?将函数重命名为更有意义的函数将极大地改进它。

第三,你的函数做两件事:它既计算textarea的统计数据,然后用字符串格式化它们。但是,如果不是那个字符串,你想要它以不同的格式呢?或者只是行数,而不是其他什么?而不是返回一个字符串,为什么不返回一个数据结构(一个简单的对象),里面有这些统计信息?这样您就可以以任何方式格式化数据。

第四,你对一个单词的定义有点......奇怪。定义一个单词很困难,你的定义说.(和其他人)本身就是一个单词,所以hello !是由两个单词组成的,而不是一个单词。这是对的吗?

答案 2 :(得分:2)

您可以将id textarea传递给该函数。

function getStats(textarea) {
  var text = document.getElementById(textarea).value,
    chars = text.length,
    words = text.split(/\S+/g).length - 1,
    lines = text.split("\n").length;
  return lines + " lines, " + words + " words, " + chars + " chars";
}

就我个人而言,我希望使用字符,单词和行而不是字符串返回object

function getStats(textarea) {
    var text = document.getElementById(textarea).value;
    return {
        chars : text.length,
        words : text.split(/\S+/g).length - 1,
        lines : text.split("\n").length
    }
}

答案 3 :(得分:1)

您可以使用小型JavaScript代码

来实现上述功能

请查看此链接:www.jsfiddle.net/MrbUK /

参考链接:http://textmechanic.co/Count-Text.html

对于行数:   Textarea.value.split(/ \ N /)。长度