2013-08-27 58 views
9

我有一個jQuery函數用於在textarea字段中進行字詞計數。此外,它不包括所有在[[[tripple bracket]]]中關閉的單詞。它用拉丁字符很好用,但它有西里爾文句子的問題。我想,誤差部分與正則表達式:西裏爾字母表的正則表達式

$(field).val().replace(/\[\[\[[^\]]*\]\]\]/g, '').match(/\b/g); 

例既親切短語: http://jsfiddle.net/A3cEG/2/

我需要計算所有文字,包括cirillic表達,不僅在拉丁詞。怎麼做?

+0

不知道你要做什麼,但不應該'.trim()。split(/ \ s + /)。length'爲每個字母表做? – Bergi

+0

@Bergi如果OP想要將一個字符串「...... like this」計數爲2個單詞,則不會。 –

回答

24

JavaScript(至少是最廣泛使用的版本)並不完全支持Unicode。也就是說,\w只匹配拉丁字母,十進制數字和下劃線([a-zA-Z0-9_]),而\b匹配單詞字符和非單詞字符之間的邊界。

要查找使用拉丁文或西裏爾字母的輸入字符串的所有的話,你就必須做這樣的事情:

.match(/[\wа-я]+/ig); // where а is the Cyrillic а. 

或者如果你喜歡:

.match(/[\w\u0430-\u044f]+/ig); 

當然,這將在可能意味着你需要稍微調整一下你的代碼,因爲在這裏它將匹配所有單詞而不是單詞邊界。請注意,[а-я]here中描述的「基本西裏爾字母」中的任何字母匹配。要匹配此範圍之外的字母,可以根據需要修改字符集以包含這些字母,例如也匹配俄羅斯Ё/ё,使用[а-яё]

另外請注意,您的三架模式可以簡化爲:

.replace(/\[{3}[^]]*]{3}/g, '') 

或者,你可能想看看XRegExp項目,這是一個開源項目,以新的功能添加到基JavaScript正則表達式引擎 - 及其Unicode插件。

+1

我也建議/ [\wа-яА-Я] +/ig作爲「а-я」區分大小寫。 – Zon

+1

@結尾處的'i'使其不區分大小寫。雖然我會承認幾乎肯定有一些瀏覽器不夠聰明,無法處理'/ [а-я]/i'中的匹配А-Я! –

+0

像Zon瀏覽器! :) – Zon