findemo
Version:
library to find emoji from string and Convert Emoji to UTF and UTF to emoji
73 lines (64 loc) • 2.68 kB
JavaScript
let emoRegexString = "(?:[\u2700-\u27bf]|(?:\ud83c[\udde6-\uddff]){2}|[\ud800-\udbff][\udc00-\udfff]|[\u0023\u002a\u0030-\u0039]\ufe0f?\u20e3|\u3299|\u3297|\u303d|\u3030|\u24c2|\ud83c[\udd70-\udd71]|\ud83c[\udd7e-\udd7f]|\ud83c\udd8e|\ud83c[\udd91-\udd9a]|\ud83c[\udde6-\uddff]|[\ud83c\ude01-\ude02]|\ud83c\ude1a|\ud83c\ude2f|[\ud83c\ude32-\ude3a]|[\ud83c\ude50-\ude51]|\u203c|\u2049|[\u25aa-\u25ab]|\u25b6|\u25c0|[\u25fb-\u25fe]|\u00a9|\u00ae|\u2122|\u2139|\ud83c\udc04|[\u2600-\u26FF]|\u2b05|\u2b06|\u2b07|\u2b1b|\u2b1c|\u2b50|\u2b55|\u231a|\u231b|\u2328|\u23cf|[\u23e9-\u23f3]|[\u23f8-\u23fa]|\ud83c\udccf|\u2934|\u2935|[\u2190-\u21ff])";
let emoRegex = new RegExp(emoRegexString);
function findEmoji(str) {
let emoArr = [];
for (let i = 0; i < str.length; i++) {
let charPair = str.substring(i, i + 2);
if (charPair.charAt(0) === " ") continue;
let result = RegExp(emoRegex).test(charPair);
if (result) {
// to remove � unwanted emoji. start and end value of � emoji
let strtCode = 55296;
let endCode = 57343;
let charCodeValue = charPair.codePointAt(0);
if (!((charCodeValue >= strtCode) && (charCodeValue <= endCode))) {
let emoLength = String.fromCodePoint(charCodeValue).length;
let emo = {
position: [],
emoChar: null
};
if (emoLength > 1) {
emo.position.push(i);
emo.position.push(i + 1);
emo.emoChar = charPair;
emo.utf = emoToUtf(charPair);
} else {
let reResult = RegExp(emoRegex).test(charPair.charAt(0));
if (reResult === false) {
continue;
} else {
emo.position.push(i);
emo.emoChar = charPair.charAt(0);
emo.utf = emoToUtf(charPair.charAt(0));
}
}
emoArr.push(emo)
}
}
}
let jsonObj = new Object();
jsonObj.emos = emoArr;
return jsonObj;
}
function emoToUtf(emo) {
var comp;
if (emo.length === 1) {
comp = emo.charCodeAt(0);
}
comp = (
(emo.charCodeAt(0) - 0xD800) * 0x400
+ (emo.charCodeAt(1) - 0xDC00) + 0x10000
);
if (comp < 0) {
comp = emo.charCodeAt(0);
}
return comp.toString("16");
}
function utfToEmo(utfChar) {
return String.fromCodePoint(parseInt (utfChar, 16))
}
module.exports ={
findEmoji,
emoToUtf,
utfToEmo
}