我想要实现的是在多语言文本中获得字数。
就像我有一个文本同时有英文和中文:The last Olympics was held in 北京
,计数应该是 8,因为有六个英文单词和两个汉字,就像 Microsoft Word 中的字数一样。
在 Ruby 和 JavaScript 中最好的方法是什么?
我想要实现的是在多语言文本中获得字数。
就像我有一个文本同时有英文和中文:The last Olympics was held in 北京
,计数应该是 8,因为有六个英文单词和两个汉字,就像 Microsoft Word 中的字数一样。
在 Ruby 和 JavaScript 中最好的方法是什么?
我有一个基于“如何在 ruby 中检测字符串中的 cjk 字符”的解决方案。
s = 'The last Olympics was held in 北京'
class String
def contains_cjk?
!!(self =~ /\p{Han}|\p{Katakana}|\p{Hiragana}|\p{Hangul}/)
end
end
s.split.inject(0) do |sum, word|
if word.contains_cjk?
sum += word.length # => ONLY work in Ruby 1.9.
# Search for other methods to do this for 1.8
else
sum += 1
end
end
你可以在 JavaScript 中试试这个。它基本上通过排除英语中可能的每个字符来获取符号。我可能忘记了一些字符,它可能不适用于具有额外特殊字符的其他语言,但请尝试一下。为简洁起见,我使用 jQuery 的$.trim
函数,但您也可以使用“如何在 javascript 中修剪字符串? ”。
演示:http: //jsbin.com/otusuv/7/edit
var str = 'The last Olympics 隶草 was held in 北京';
var words = '', symbols = '';
str.replace(/([\w\s]*)([^\w;,.'"{}\[\]+_)(*&\^%$#@!~\/?]*)/g, function(a,b,c) {
words += b;
symbols += c;
});
words = $.trim(words).split(' ');
symbols = symbols.replace(' ', '').split('');
var total_words = words.length + symbols.length
您可能还想尝试XRegExp。它是一个 JavaScript 库,可增强正则表达式并具有一些不错的功能。