3

我正在创建一个类来检测表情符号并具有以下功能来检测:)表情符号,包括它们的各种变化(=], =), [=, [:,等),但它不起作用,我无法终生找出问题所在。我正在 JSFiddle 中对其进行测试。

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

1 回答 1

6

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

这看起来像是来自地狱的邪恶混乱,直到您将其分解:

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

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

中间|的意思是“匹配我的左边或匹配我的右边”,然后我写了相同的两个字符类,但反向匹配方向相反的笑脸。

我认为你的正则表达式的问题在这里:

[]/)]

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

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

于 2013-06-06T05:11:24.760 回答