在javascript中使用正则表达式检测表情符号

在javascript中使用正则表达式检测表情符号,javascript,regex,Javascript,Regex,我正在创建一个类来检测表情,并有以下内容来检测表情:)笑脸,包括它们的各种变化(=]、=)、[=、[:、等等),但它不起作用,我一辈子都无法找出问题所在。我正在JSFIDLE中测试它 var DetectEmoticons = { countHappy: function(data) { var pattern = new RegExp("[:/=]-?[]/)] | [[/(]-?[:/=]", "g"); var count = (data.match

我正在创建一个类来检测表情,并有以下内容来检测表情:)笑脸,包括它们的各种变化(
=]、=)、[=、[:、
等等),但它不起作用,我一辈子都无法找出问题所在。我正在JSFIDLE中测试它

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

这看起来像是地狱里的邪恶混乱,直到你把它打破:

[:=;]
匹配一个:或一个=或一个

[)(| \/\]\[]
匹配一个),(,|,\(反斜杠,因为它是元字符),/,](反斜杠,因为它是元字符)或[(反斜杠,因为它是元字符)。(我们不需要反斜杠)或(因为它们不是字符类内部的元字符)

中间的
|
表示“匹配我的左边或匹配我的右边”,然后我编写相同的两个字符类,但反过来匹配方向相反的笑脸

我认为正则表达式的问题在于:

[]/)]

您忘记用
\
转义第一个
]
,因此它被视为过早结束字符类


另一个问题是,您认为正斜杠
/
用于转义。它不是,
\
用于转义,
/
在正则表达式中没有特殊意义。

应该会有帮助。谢谢你的解释,但为什么它仍然不起作用?您需要将反斜杠加倍,即
\\
变成
\\\
,而
\
变成
\
。这是因为字符串和RegExp转义。@ibopm是否必须将反斜杠加倍?如果它是静态的,也可以使用RegExp文本而不是
new RegExp()
,并避免反斜杠问题。