我使用以下函数替换字符串中的表情符号并且效果很好:
function doEmoji(s){
var ranges = [
'\ud83c[\udf00-\udfff]', // U+1F300 to U+1F3FF
'\ud83d[\udc00-\ude4f]', // U+1F400 to U+1F64F
'\ud83d[\ude80-\udeff]' // U+1F680 to U+1F6FF
];
var x = s.toString(16).replace(new RegExp(ranges.join('|'), 'g'),' whatever ');
return x;
};
现在我想检查该字符串是否只包含表情符号或空格字符。 我之所以这样做是因为我想只在没有其他字符存在的情况下替换emojis(空格除外)。
一些例子:
Hello how are you? //do nothing
// replace emojis
// replace emojis
我正在寻找一个简单的解决方案,也许是一个正则表达式。 感谢
答案 0 :(得分:4)
只是一个小调整,以查找字符串是否只有表情符号和空格......
const ranges = [
'\ud83c[\udf00-\udfff]', // U+1F300 to U+1F3FF
'\ud83d[\udc00-\ude4f]', // U+1F400 to U+1F64F
'\ud83d[\ude80-\udeff]', // U+1F680 to U+1F6FF
' ', // Also allow spaces
].join('|');
const removeEmoji = str => str.replace(new RegExp(ranges, 'g'), '');
const isOnlyEmojis = str => !removeEmoji(str).length;
答案 1 :(得分:1)
在2018/2019年,添加了更多表情符号,因此我对bholben的RegExp进行了一些修改(来源:regextester.com):
const ranges = [
'\u00a9|\u00ae|[\u2000-\u3300]|\ud83c[\ud000-\udfff]|\ud83d[\ud000-\udfff]|\ud83e[\ud000-\udfff]',
' ', // Also allow spaces
].join('|');
const removeEmoji = str => str.replace(new RegExp(ranges, 'g'), '');
const isOnlyEmojis = str => !removeEmoji(str).length;
答案 2 :(得分:1)
一个简单的解决方案,如果您不需要任何依赖项:
{{1}}
它从unicode字符集中删除了所有常规字符和用于书写的字符,并排除了表情符号和其他一些在我们的用例中还可以的东西,但这可能是唯一的警告。