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

adr*_*nmc 3 javascript regex

我正在创建一个类来检测表情符号,并有以下内容来检测:)表情符号,包括它们的各种变化(=], =), [=, [:,等),但它不起作用,我不能为我的生活弄清楚什么是错的.我在JSFiddle中测试它.

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

Pat*_*shu 6

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

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

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

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

|在中心意思是"比赛给我留下和我的比赛权",然后我写了两个相同的字符类,但在反向匹配在方向相反的表情.

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

[]/)]

你忘了逃避第]一个,\所以它被视为过早地结束了角色类.

另一个问题是你认为正斜杠/是用来逃避的.它不是,\用于逃避,/在正则表达式中没有特殊含义.

  • 你需要加倍反斜杠,即``\\``变成``\\\\``,````变成``\\``.这是因为字符串和RegExp都是转义. (3认同)