使用javascript,我如何计算亚洲字符和英语单词的混合

use*_*513 6 javascript text character counting

我需要采取一系列混合的亚洲人物(现在,只假设中国汉字或日本汉字/平假名/片假名)和"字母​​数字"(即Enlgish,法语),并按以下方式计算:

1)将每个亚洲字符数计为1; 2)将每个字母数字WORD计为1;

几个例子:

株式会社myCompany = 4个字符+ 1个字=总共5个株式会社マイコ= 7个字符


到目前为止我唯一的想法是使用:

var wordArray=val.split(/\w+/);
Run Code Online (Sandbox Code Playgroud)

然后检查每个元素以查看其内容是否为字母数字(因此计为1)或不是(因此取数组长度).但我觉得这根本不是很聪明,被计算的文本可能高达10,000字,所以不是很快.

想法?

bob*_*nce 6

不幸的是 JavaScriptRegExp不支持 Unicode 字符类;\\w仅适用于 ASCII 字符(以某些浏览器错误为模)。

\n\n

不过,您可以按组使用 Unicode 字符,因此如果您可以将您感兴趣的每组字符隔离为一个范围,则可以做到这一点。例如。:

\n\n
var r= new RegExp(\n    '[A-Za-z0-9_\\]+|'+                             // ASCII letters (no accents)\n    '[\\u3040-\\u309F]+|'+                           // Hiragana\n    '[\\u30A0-\\u30FF]+|'+                           // Katakana\n    '[\\u4E00-\\u9FFF\\uF900-\\uFAFF\\u3400-\\u4DBF]',   // Single CJK ideographs\n'g');\n\nvar nwords= str.match(r).length;\n
Run Code Online (Sandbox Code Playgroud)\n\n

(这试图为日语提供更真实的 \xe2\x80\x98words\xe2\x80\x99 计数,将一种假名类型的每次运行计数为一个单词。当然,这仍然不对,但它可能比将每个音节视为一个单词。)

\n\n

显然,如果您想\xe2\x80\x98正确执行\xe2\x80\x99,则必须考虑更多字符。首先,我们希望您没有超出基本多语言平面之外的字符!

\n


Thi*_*ilo -2

我认为您想要循环所有字符,并在每次当前字符与前一个字符处于不同的单词(根据您的定义)时增加一个计数器。