I need to replace text like ;)
or :p
by emoticon but I can\'t create a regex in order to detect this. Now i can detect only like :wink:
I modified AK1's answer and provided an example.
// Official Twitch robot emotes: https://twitchemotes.com
var emoticons = {
':)' : 'ebf60cd72f7aa600',
':(' : 'd570c4b3b8d8fc4d',
':o' : 'ae4e17f5b9624e2f',
':z' : 'b9cbb6884788aa62',
'B)' : '2cde79cfe74c6169',
':\\' : '374120835234cb29',
';)' : '3407bf911ad2fd4a',
';p' : '3407bf911ad2fd4a',
':p' : 'e838e5e34d9f240c',
'R)' : '0536d670860bf733',
'o_O' : '8e128fa8dc1de29c',
':D' : '9f2ac5d4b53913d7',
'>(' : 'd31223e81104544a',
'<3' : '577ade91d46d7edc'
}
// Convert the emoticon map entries into their fully-qualified paths.
mapIdsToPaths(emoticons,
'https://static-cdn.jtvnw.net/jtv_user_pictures/',
'chansub-global-emoticon-',
'24x18');
// Replace all possible emotes in each paragraph.
document.querySelectorAll('p').forEach(e => e.innerHTML = replaceEmoticons(e.innerHTML, emoticons));
function replaceEmoticons(text, emotes) {
return Object.keys(emotes).reduce((result, emote) => {
return result.replace(new RegExp(RegExpEscape(emote), 'gi'), function(match) {
return (img => img != null ? '<img src="' + img + '"/>' : match)(emotes[match]);
});
}, text);
}
// helper function to escape special characters in regex
function RegExpEscape(text) {
return text.replace(/[-[\]{}()*+?.,\\^$|#\s]/g, "\\$&");
}
// Map emote ids to their URLs.
function mapIdsToPaths(emotes, url, prefix, size) {
Object.keys(emotes).forEach((id) => {
emotes[id] = url + prefix + emotes[id] + '-' + size + '.png';
});
}
<p>Hello ;)<p>
<p>How are you :)?<p>
<p>o_O Today was not a good day... :(<p>
Try the following.However, you should escape the special characters ( and ) in your smileys when making the regexes.
//helper function to escape special characters in regex
function RegExpEscape(text) {
return text.replace(/[-[\]{}()*+?.,\\^$|#\s]/g, "\\$&");
}
function replaceEmoticons(text) {
var emoticons = {
':)' : 'smile.gif',
':(' : 'sad.gif',
';)' : 'wink.gif'
}
var result = text;
var emotcode;
var regex;
for (emotcode in emoticons)
{
regex = new RegExp(RegExpEscape(emotcode), 'gi');
result = result.replace(regex, function(match) {
var pic = emots[match.toLowerCase()];
if (pic != undefined) {
return '<img src="' + pic + '"/>';
} else {
return match;
}
});
}
return result;
}
This function takes a string and returns a string with all the replacements found inside of the emots
object.
function replaceText(text) {
var emots = {
";)": "wink",
":)": "xxx",
":p": "xxx",
};
for(var key in emots){
if(emots.hasOwnProperty(key)){
text = text.replace(new RegExp(escapeRegExp(key), 'g'), '<img src="http://localhost:8080/' + emots[key] + '.png"/>');
}
}
return text;
}
function escapeRegExp(str) {
return str.replace(/[\-\[\]\/\{\}\(\)\*\+\?\.\\\^\$\|]/g, "\\$&");
}