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

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

あなたがそれを分解するまで、これは地獄からの不浄な混乱のように見えます:

[:=;]: または one = または one ; のいずれかに一致します。

[)(|\\/\]\[])、(、|、\ (メタ文字であるためバックスラッシュ)、/、] (メタ文字であるためバックスラッシュ) または [ (メタ文字であるためバックスラッシュ) (バックスラッシュは不要) または(文字クラス内のメタ文字ではないため)。

中央の|は「自分の左に一致 OR 私の右に一致」を意味し、同じ 2 つの文字クラスを逆に記述して、方向が逆のスマイリーに一致させます。

あなたの正規表現の問題はここにあると思います:

[]/)]

]最初を a でエスケープするのを忘れた\ので、文字クラスを途中で終了するものとして扱われます。

/もう1つの問題は、エスケープにスラッシュが使用されていると思ったことです。そうではなく、\エスケープに使用され/、正規表現で特別な意味はありません。

于 2013-06-06T05:11:24.760 に答える