Regex将文本仅与表情图标匹配,而不与其他文本匹配

人气:59 发布:2023-01-03 标签: javascript emoji emoticons

问题描述

我有这个正则表达式来检测字符串是否包含任何表情:

/(?:[u2700-u27bf]|(?:ud83c[udde6-uddff]){2}|[ud800-udbff][udc00-udfff]|[u0023-u0039]ufe0f?u20e3|u3299|u3297|u303d|u3030|u24c2|ud83c[udd70-udd71]|ud83c[udd7e-udd7f]|ud83cudd8e|ud83c[udd91-udd9a]|ud83c[udde6-uddff]|[ud83c[ude01uddff]|ud83c[ude01-ude02]|ud83cude1a|ud83cude2f|[ud83c[ude32ude02]|ud83cude1a|ud83cude2f|ud83c[ude32-ude3a]|[ud83c[ude50ude3a]|ud83c[ude50-ude51]|u203c|u2049|[u25aa-u25ab]|u25b6|u25c0|[u25fb-u25fe]|u00a9|u00ae|u2122|u2139|ud83cudc04|[u2600-u26FF]|u2b05|u2b06|u2b07|u2b1b|u2b1c|u2b50|u2b55|u231a|u231b|u2328|u23cf|[u23e9-u23f3]|[u23f8-u23fa]|ud83cudccf|u2934|u2935|[u2190-u21ff])/g
但是,我如何检测字符串是否只包含表情符号而不包含任何其他标准文本?我尝试将上述内容包含在[]中,但没有成功。我正在使用Java脚本。

推荐答案

删除与模式匹配的所有内容,并查看是否还有剩余内容。如果您认为可能存在不需要的空格,请考虑使用trim()

数据-lang="js"数据-隐藏="假"数据-控制台="真"数据-巴贝尔="假">
var pattern = /(?:[u2700-u27bf]|(?:ud83c[udde6-uddff]){2}|[ud800-udbff][udc00-udfff]|[u0023-u0039]ufe0f?u20e3|u3299|u3297|u303d|u3030|u24c2|ud83c[udd70-udd71]|ud83c[udd7e-udd7f]|ud83cudd8e|ud83c[udd91-udd9a]|ud83c[udde6-uddff]|[ud83c[ude01uddff]|ud83c[ude01-ude02]|ud83cude1a|ud83cude2f|[ud83c[ude32ude02]|ud83cude1a|ud83cude2f|ud83c[ude32-ude3a]|[ud83c[ude50ude3a]|ud83c[ude50-ude51]|u203c|u2049|[u25aa-u25ab]|u25b6|u25c0|[u25fb-u25fe]|u00a9|u00ae|u2122|u2139|ud83cudc04|[u2600-u26FF]|u2b05|u2b06|u2b07|u2b1b|u2b1c|u2b50|u2b55|u231a|u231b|u2328|u23cf|[u23e9-u23f3]|[u23f8-u23fa]|ud83cudccf|u2934|u2935|[u2190-u21ff])/g;

var str2 = 'ℹ〰';
var str1 = 'ℹ〰asdfasd';

var isOnlyEmojis = str=>str.replace(pattern, '') === "";

console.log(isOnlyEmojis(str2) ? "It's just emojis!" : "Has real text..")
console.log(isOnlyEmojis(str1) ? "It's just emojis!" : "Has real text..")

18