我有一个带有未过滤用户输入的文本区域,其中包括换行符、空格、标点符号等。我想获取所有不同的小写单词,它们的出现,按出现排序。当 strip() 字符串是可变的时,我还没有找到一种直接的方法来提取单词。任何想法如何实现这一目标?
例如:
字 1 字 2 字 1 字 1, ...字 2 您好
...。
. 你好
会成为
val array = {
word1 : 3,
word2 : 2,
hello : 2,
hi : 1
};
谢谢你的帮助!
这是一种可能的解决方案:
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);
演示:http: //jsfiddle.net/mmFgE/
快速演示: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);