I find it laughable that @scjosh released code under a copyright… I mean really? lol wow.
Feel free to use this for whatever:
function parseTags(message) {
message = message.trim() + ' ';
var firstSpace = message.indexOf(' ');
var rawTags = message
.slice(message.charAt(0) === '@' ? 1 : 0, firstSpace)
.split(';');
var tags = {};
for (var i = 0; i < rawTags.length; i++) {
var tag = rawTags[i];
var firstEquals = tag.indexOf('=');
var key = tag.slice(0, firstEquals);
var value = tag.slice(firstEquals + 1);
if(firstEquals === -1) {
tags[key] = true;
} else if(/^[0-9]+$/.test(value)) {
tags[key] = parseInt(value);
} else {
value = value
.replace(/\\:/g, ';')
.replace(/\\s/g, ' ')
.replace(/\\\\/g, '\\')
.replace(/\\r/g, '\r')
.replace(/\\n/g, '\n');
tags[key] = value;
}
}
return tags;
}
It should cover all cases as outlined in the IRCv3 documentation at http://ircv3.net/specs/core/message-tags-3.2.html