2013-06-06 27 views
3

我創建了一個類來檢測圖釋並具有以下功能以檢測:)表情符號,包括其各種變體(=], =), [=, [:,等),但它不起作用,並且我無法我弄清楚什麼是錯的。我在JSFiddle中測試它。在javascript中使用正則表達式檢測圖釋

var DetectEmoticons = { 
    countHappy: function(data) { 
     var pattern = new RegExp("[:/=]-?[]/)] | [[/(]-?[:/=]", "g"); 
     var count = (data.match(pattern) || []).length; 
     return count; 
    } 
} 
alert(DetectEmoticons.countHappy("=)")); 
+0

http://stackoverflow.com/questions/4425683/how-to-build-a-regular-expression-regex-for-slangs-and-emoticons?rq=1應該有所幫助。 –

回答

6

[:=;]-?[)(|\\/\]\[]|[)(|\\/\]\[]-?[:=;]

這看起來像從地獄邪惡的混亂,直到你把它分解:

[:=;]的比賽之一:或者一個=或一個; (()|,\(反斜線因爲它是一個元字符),/,](反斜線因爲它是一個元字符)或[(反斜線,因爲它是一個元字符)。(我們沒有需要反斜槓)或(因爲它們不是字符類中的元字符)

中心的|意味着'匹配左邊或匹配我的權利',然後我寫入相同的兩個字符類,但是相反,以匹配表情的方向相反的笑臉。

我認爲你的正則表達式的問題在這裏:

[]/)]

你忘了逃跑的第一]\因此它被視爲提前結束字符類。

另一個問題是,你認爲正斜槓/是用來逃避。它不是,\用於轉義,/在正則表達式中沒有特別的意義。

+1

錯過了鼻子 – JNF

+0

@JNF是的,現在得到了 – Patashu

+0

感謝您的解釋,但它怎麼仍然不起作用? http://jsfiddle.net/TTWsa/ – adrianmc