2013-06-06 82 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