Last active
October 25, 2015 09:59
-
-
Save clicman/eb95bd61a9ed7f48539b to your computer and use it in GitHub Desktop.
Ultimate javascript hashtag user and url parting function
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
function parse(text) { | |
//URL prefix for tag | |
var tagUrl = "#/tag/?tag="; | |
//URL prefix for username | |
var profileurl = "#/profile/?username="; | |
var parseURL = function (value) { | |
console.log(value); | |
return value.replace(/(^|\s)[-a-zA-Z0-9@:%_\+.~#?&//=]{2,256}\.[a-z]{2,4}\b(\/[-a-zA-Z0-9@:%_\+.~#?&//=]*)?/gi, function (url) { | |
var newLineMatch = /(\r\n|\n|\r)/gm.exec(url); | |
var urlLine = url.replace(/(\r\n|\n|\r)/gm, ""); | |
if (newLineMatch) { | |
return "<br/>" + urlLine.link(urlLine); | |
} else { | |
return urlLine.link(urlLine); | |
} | |
}); | |
}; | |
var parseUsername = function (value) { | |
return value.replace(/(^|)([@]+[a-z0-9-\.-_]+?)(?=[\s@^,]|$|\.\s)/gi, function (u) { | |
var newLineMatch = /(\r\n|\n|\r)/gm.exec(u); | |
var userLine = u.replace(/(\r\n|\n|\r)/gm, ""); | |
var username = userLine.replace("@", ""); | |
if (newLineMatch) { | |
return "<br/>" + userLine.link(profileurl + username); | |
} else { | |
return userLine.link(profileurl + username); | |
} | |
}); | |
}; | |
var parseHashtag = function (value) { | |
return value.replace(/(?:^|)([#][^\/:!@#$%^&*()=+]\S+?)(?=[\s.:,;+=*\/#!]|$)/gi, function (t) { | |
var newLineMatch = /(\r\n|\n|\r)/gm.exec(t); | |
var tagLine = t.replace(/(\r\n|\n|\r)/gm, ""); | |
var tag = tagLine.replace("#", ""); | |
if (newLineMatch) { | |
return "<br/>" + tagLine.link(tagUrl + tag); | |
} | |
return tagLine.link(tagUrl + tag); | |
}); | |
}; | |
return (parseURL(parseHashtag(parseUsername(text)))); | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Test fiddle: https://jsfiddle.net/clicman/x98pskmq/1/