如何将HTML textarea转换为单词:使用jQuery计算键值数组?

时间:2012-09-28 12:21:38

标签: jquery arrays string text

我有一个带有未经过滤的用户输入的textarea,其中包括换行符,空格,标点符号等。我想得到所有不同的小写单词,它们的出现,按出现次数排序。当strip()字符串是变量时,我还没有找到提取单词的直接方法。任何想法如何实现这一目标?

例如:

  

WORD1 Word2 word1   Word1,...
  word2你好...
  。 。你好.hi

会变成

val array = {
    word1 : 3,
    word2 : 2,
    hello : 2,
       hi : 1
};

感谢您的帮助!

2 个答案:

答案 0 :(得分:3)

以下是一种可能的解决方案:

var result = {},
    value = $("textarea").val(),
    res = value.match(/\b([a-z0-9]+)\b/g) || [];

for (var i = 0; i < res.length; i++) {
    result[res[i]] = (value.match(new RegExp(res[i], "ig")) || []).length;
}

console.log(result);​

DEMO: http://jsfiddle.net/mmFgE/

答案 1 :(得分:1)

快速演示: http://jsfiddle.net/ZaQqb/

注意:您需要添加更多特殊字符转换等。

<强>代码:

var t = $('textarea').val();
console.log('Original: ' + t);

// 1. prepare your text
t = t.toLowerCase();
while(t.indexOf('.') != -1) t = t.replace('.', ' ');
while(t.indexOf(',') != -1) t = t.replace(',', ' ');
// TODO: add replcement for more spl characters here
while(t.indexOf('  ') != -1) {
    t = t.replace('  ', ' ');
}
console.log('Prepared: ' + t);

// 2. split by ' '
t = t.split(' ');

// 3. count
var counts = {};
for(var i in t) {
    counts[t[i]] = (counts[t[i]] == undefined) ? 1 : counts[t[i]]+1;
}

console.log(counts);