我目前有http://jsfiddle.net/cuLa9mtf/8/
function wordStat(text) {
return text.split('').filter(function(letter){
return letter > '\u3040' && letter < '\u4DBF';
}).reduce(function (stat, word) {
if (!stat[word]) stat[word] = 0;
stat[word]++;
return stat;
}, {});
}
var input = document.querySelector('#input');
var output = document.querySelector('#output');
input.addEventListener('keyup', function () {
output.value = JSON.stringify(wordStat(input.value), 2, 2);
})
但它似乎不起作用取决于我从中复制日文文本的位置。如果我复制并粘贴来自Rikai的字符,它会起作用,我会在结果数组中找到结果(预期结果),但如果我从其他网站(例如Jisho dictionary复制)则不起作用(字符被过滤掉了。)
我将使用它的方式是:我将有一个文本框,用户将粘贴他们的日文文本,我将过滤掉任何不是日文字符的东西(取出[a-zA-Z所有标点字母这让我想到如何使用前端Javascript可靠地过滤出非日文字符?
(根据Rikai日文字符是unicode \ u3040 - \ u4DBF)
答案 0 :(得分:3)
在查看你的代码和你的Rikai链接之后,你似乎错过了大量的角色:CJK统一的表意文字 - 普通和不常见的汉字(4e00 - 9faf)
我对你的filter
做了一个非常小的修改,它似乎能够成功地从Jisho词典中获取汉字字符:
function wordStat(text) {
return text.split('').filter(function(letter){
return (letter > '\u3040' && letter < '\u4DBF') || (letter > '\u4e00' && letter < '\u9faf');
}).reduce(function (stat, word) {
if (!stat[word]) stat[word] = 0;
stat[word]++;
return stat;
}, {});
}
var input = document.querySelector('#input');
var output = document.querySelector('#output');
input.addEventListener('keyup', function () {
output.value = JSON.stringify(wordStat(input.value), 2, 2);
});