首页 > 解决方案 > 优化正则表达式,仅在字符串 javascript 中检测 emojis 和 emoji

问题描述

我正在开发一个 React Native 聊天应用程序,我需要两个正则表达式,一个用于检测字符串是否包含表情符号,另一个用于检测字符串是否包含表情符号,仅用于设置大量消息的样式

经过一些研究,我发现了最快和最完整的正则表达式,用于检测字符串是否具有完美运行的表情符号(在第一次匹配后停止):

 /(?:[\u2700-\u27bf]|(?:\ud83c[\udde6-\uddff]){2}|[\ud800-\udbff][\udc00-\udfff])[\ufe0e\ufe0f]?(?:[\u0300-\u036f\ufe20-\ufe23\u20d0-\u20f0]|\ud83c[\udffb-\udfff])?(?:\u200d(?:[^\ud800-\udfff]|(?:\ud83c[\udde6-\uddff]){2}|[\ud800-\udbff][\udc00-\udfff])[\ufe0e\ufe0f]?(?:[\u0300-\u036f\ufe20-\ufe23\u20d0-\u20f0]|\ud83c[\udffb-\udfff])?)*/

我大麦了解它的工作原理,所以我对其进行了重构以检测字符串是否仅包含表情符号 --5 是表情符号的最大数量

/^((?:[\u2700-\u27bf]|(?:\ud83c[\udde6-\uddff]){2}|[\ud800-\udbff][\udc00-\udfff])[\ufe0e\ufe0f]?(?:[\u0300-\u036f\ufe20-\ufe23\u20d0-\u20f0]|\ud83c[\udffb-\udfff])?(?:\u200d(?:[^\ud800-\udfff]|(?:\ud83c[\udde6-\uddff]){2}|[\ud800-\udbff][\udc00-\udfff])[\ufe0e\ufe0f]?(?:[\u0300-\u036f\ufe20-\ufe23\u20d0-\u20f0]|\ud83c[\udffb-\udfff])?)*){0,5}$/

只需将整个正则表达式分组并在开头添加 ^ 并在末尾添加 {0,5}$

有没有更好的方法来做第二个正则表达式?

标签: javascriptregexreact-native

解决方案


推荐阅读