有没有办法检查JS中的字符串是否是一个表情符号?
问题很简单:我有一个字符串str,如何检查str一个表情符号,是否只有一个?另外,我宁愿不使用其他库。 比赛"🍎","⛹🏿♂️","3️⃣"但不"🍓a","𝕒","🍌🍀" 我在寻找解决方案时遇到了麻烦,但是到目前为止,我已经尝试了一些方法: 尝试的解决方案1-玩弄长度和...运算符 我了解到,表情符号占据一个以上的字节,有些甚至占据4个字节,甚至更多……我们可以通过字符串的length属性来衡量: console.log("🍎".length); // 2 console.log("🛡️".length); // 3 console.log("⛹🏿♂️".length); // 6 然后我发现...运算符考虑了这一点,并正确分离了数组中的表情符号-然后,我可以查看结果数组的length属性并检测它们是否不同。 str = "⛹🏿♂️"; if (str.length !== [...str].length) { // is emoji? } else { // is not emoji } 但是,这不会检查其他多字节字符,例如𝕡长度为2的字符。另外,有些表情符号仍然被怪异地分开。 尝试解决方案2-正则表达式,正则表达式 当然,正则表达式是一个值得研究的问题,但我尚未找到可行的解决方案。 这个答案的正则表达式\u00a9|\u00ae|[\u2000-\u3300]|\ud83c[\ud000-\udfff]|\ud83d[\ud000-\udfff]|\ud83e[\ud000-\udfff]可以很好地检测字符串是否有表情符号,但是将其应用于我的情况会产生很多问题。这是我的测试: A部分-没有字符串正则表达式(^和$)的开始/结束 2A.1 str.match(regex)非常不一致,它分解了一些表情符号和其他一些无法使用的表情符号。我没有找到一种方法来找出它是否甚至包含非表情符号字符或是否包含多个表情符号: let regex = /(\u00a9|\u00ae|[\u2000-\u3300]|\ud83c[\ud000-\udfff]|\ud83d[\ud000-\udfff]|\ud83e[\ud000-\udfff])/; console.log("5️⃣".match(regex)); // [ '⃣', '⃣', …