Skip to content

Instantly share code, notes, and snippets.

@MattRoelle
Last active August 29, 2015 13:56
Show Gist options
  • Save MattRoelle/9063747 to your computer and use it in GitHub Desktop.
Save MattRoelle/9063747 to your computer and use it in GitHub Desktop.
var regexps = [
{
'regexp': /`([^`]*)`/g,
'flag': 'code'
},
{
'regexp': /\*\*([^\*]*)\*\*/g,
'flag': 'bold'
},
{
'regexp': /\*([^\*]*)\*/g,
'flag': 'em'
},
{
'regexp': /_([^_]*)_/g,
'flag': 'underline'
},
{
'regexp': /#(\d*[a-zA-Z_]+)/g,
'flag': 'channel'
},
];
function parse(str) {
var charmap = str.split('').map(function(e, i) {
return {
character: e,
flags: []
};
});
regexps.forEach(function(regexp, i) {
var matches = str.match(regexp.regexp);
if (matches !== null) {
matches.forEach(function(match, i) {
var matchIndex = str.indexOf(match);
charmap[matchIndex].flags.push('initial');
charmap[(matchIndex + match.length) - 1].flags.push('terminal');
for(var charIndex = matchIndex; charIndex < (matchIndex + match.length); charIndex++) {
charmap[charIndex].flags.push(regexp.flag);
}
});
}
});
console.log(charmap);
}
parse('`this` is a *_test_* this is a #channel');
/*
***** OUTPUT *****
[ { character: '`', flags: [ 'initial', 'code' ] },
{ character: 't', flags: [ 'code' ] },
{ character: 'h', flags: [ 'code' ] },
{ character: 'i', flags: [ 'code' ] },
{ character: 's', flags: [ 'code' ] },
{ character: '`', flags: [ 'terminal', 'code' ] },
{ character: ' ', flags: [] },
{ character: 'i', flags: [] },
{ character: 's', flags: [] },
{ character: ' ', flags: [] },
{ character: 'a', flags: [] },
{ character: ' ', flags: [] },
{ character: '*', flags: [ 'initial', 'em' ] },
{ character: '_', flags: [ 'em', 'initial', 'underline' ] },
{ character: 't', flags: [ 'em', 'underline' ] },
{ character: 'e', flags: [ 'em', 'underline' ] },
{ character: 's', flags: [ 'em', 'underline' ] },
{ character: 't', flags: [ 'em', 'underline' ] },
{ character: '_', flags: [ 'em', 'terminal', 'underline' ] },
{ character: '*', flags: [ 'terminal', 'em' ] },
{ character: ' ', flags: [] },
{ character: 't', flags: [] },
{ character: 'h', flags: [] },
{ character: 'i', flags: [] },
{ character: 's', flags: [] },
{ character: ' ', flags: [] },
{ character: 'i', flags: [] },
{ character: 's', flags: [] },
{ character: ' ', flags: [] },
{ character: 'a', flags: [] },
{ character: ' ', flags: [] },
{ character: '#', flags: [ 'initial', 'channel' ] },
{ character: 'c', flags: [ 'channel' ] },
{ character: 'h', flags: [ 'channel' ] },
{ character: 'a', flags: [ 'channel' ] },
{ character: 'n', flags: [ 'channel' ] },
{ character: 'n', flags: [ 'channel' ] },
{ character: 'e', flags: [ 'channel' ] },
{ character: 'l', flags: [ 'terminal', 'channel' ] } ]
*/
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment