Skip to content

Instantly share code, notes, and snippets.

@knubie
Forked from MattRoelle/Jupe Parsing.js
Last active August 29, 2015 13:56
Show Gist options
  • Save knubie/9063964 to your computer and use it in GitHub Desktop.
Save knubie/9063964 to your computer and use it in GitHub Desktop.
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'
]
parse = (str) ->
charmap = str.split('').map (e,i) ->
return
character: e
flags: []
for regexp in regexps
if matches = str.match regexp.regexp
for match in matches
matchIndex = str.indexOf match
charmap[matchIndex].flags.push 'initial'
charmap[matchIndex + match.length - 1].flags.push 'terminal'
for i in [matchIndex..(matchIndex + match.length)]
charmap[i].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