如何在Javascript中混合使用英文和中文进行字数统计

我想计算包含英文和中文的段落中的单词数量。 对于英语,这很简单。 每个单词都是一个单词。 对于中文,我们将每个字符都算作一个单词。 因此,香港人在这里是三个字。

因此,例如,“我是香港人”的字数应为6。

任何想法如何在Javascript / jQuery中计算它?

谢谢!

试试像这样的正则表达式:

/[\u00ff-\uffff]|\S+/g 

例如, "I am a 香港人".match(/[\u00ff-\uffff]|\S+/g)给出:

 ["I", "am", "a", "香", "港", "人"] 

然后你可以检查结果数组的长度。

正则表达式的\u00ff-\uffff部分是unicode字符范围; 你可能想把它缩小到你想要算作单词的字符。 例如,CJK Unified将是\u4e00-\u9fcc

 function countWords(str) { var matches = str.match(/[\u00ff-\uffff]|\S+/g); return matches ? matches.length : 0; } 

它不能是6,因为当你计算一个字符串的长度时它也包含空格。 所以,

 var d = "I am a 香港人"; d.length //returns 10 d.replace(/\s+/g, "").length //returns 7, excluding spaces 

仅供参考:您的网站应该正确编码。

我想我找到了你需要的东西。 “我是香港人”这包含a两次重复。 所以在@PSL 回答的帮助下,我找到了一种方法。

 var d = "I am a 香港人"; var uniqueList=d.replace(/\s+/g, '').split('').filter(function(item,i,allItems){ return i==allItems.indexOf(item); }).join(''); console.log(uniqueList.length); //returns 6 

的jsfiddle

当你评论时,我假设你在每个单词之间作为“我是香港人”的句子。 现在我改变了代码

 var d = "I am a 香 港 人"; var uniqueList=d.split(' ').filter(function(item,i,allItems){ return i==allItems.indexOf(item); }); console.log(uniqueList.length); //returns 6 

的jsfiddle