Skip to content

Instantly share code, notes, and snippets.

@clicman
Last active October 25, 2015 09:59
Show Gist options
  • Save clicman/eb95bd61a9ed7f48539b to your computer and use it in GitHub Desktop.
Save clicman/eb95bd61a9ed7f48539b to your computer and use it in GitHub Desktop.
Ultimate javascript hashtag user and url parting function
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))));
}
@clicman
Copy link
Author

clicman commented Oct 25, 2015

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment