在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()
,并避免反斜杠问题。