javascript - 优化正则表达式,仅在字符串 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}$
有没有更好的方法来做第二个正则表达式?
解决方案
推荐阅读
- javascript - select2 在 iziModal 中重复
- java - 基于 spring-cloud 的应用程序启动时出错:java.util.ConcurrentModificationException:null
- sql - 使用当前时间戳和新状态将新记录添加到我的表中
- vue.js - 在 Vuetify v-text-field 上禁用自动完成
- routes - 此处的 routeRequestParams 映射
- javascript - Tabulator js 和 Chrome:单元格中图标旁边的点
- javascript - 当我们返回页面时,formik 会阻止默认值
- javascript - 方法内部的属性显示未定义但在方法之外工作。如何解决?
- javascript - 使用 javascript 定期向 html 添加不同的文本
- flutter - 使用persistent_bottom_nav_bar 导航新屏幕时未选择的bottomNavBarItem