I need the parse text with links in the following formats:
[html title](http://www.htmlpage.com)
http://www.htmlpage.com
http://i.imgur.com/OgQ9Uaf.jpg
The output for those two strings would be:
<a href='http://www.htmlpage.com'>html title</a>
<a href='http://www.htmlpage.com'>http://www.htmlpage.com</a>
<a href='http://i.imgur.com/OgQ9Uaf.jpg'>http://i.imgur.com/OgQ9Uaf.jpg</a>
The string could include an arbitrary amount of these links, ie:
[html title](http://www.htmlpage.com)[html title](http://www.htmlpage.com)
[html title](http://www.htmlpage.com) [html title](http://www.htmlpage.com)
[html title](http://www.htmlpage.com) wejwelfj http://www.htmlpage.com
output:
<a href='http://www.htmlpage.com'>html title</a><a href='http://www.htmlpage.com'>html title</a>
<a href='http://www.htmlpage.com'>html title</a> <a href='http://www.htmlpage.com'>html title</a>
<a href='http://www.htmlpage.com'>html title</a> wejwelfj <a href='http://www.htmlpage.com'>http://www.htmlpage.com</a>
I have an extremely long function that does an alright job by passing over the string 3 times, but I can't successfully parse this string:
[This](http://i.imgur.com/iIlhrEu.jpg) one got me crying first, then once the floodgates were opened [this](http://i.imgur.com/IwSNFVD.jpg) one did it again and [this](http://i.imgur.com/hxIwPKJ.jpg). Ugh, feels. Gotta go hug someone/something.
For brevity, I'll post the regular expressions I've tried rather than the entire find/replace function:
var matchArray2 = inString.match(/[.*](.*)/g);
for matching [*](*)
, doesn't work because []()[]()
is matched
Really that's it, I guess. Once I make that match I search that match for () and [] to parse out the link an link text and build the href tag. I delete matches from a temp string so I don't match them when I do my second pass to find plain hyperlinks:
var plainLinkArray = tempString2.match(/httpS*://S*/g);
I'm not parsing any html with regex. I'm parsing a string and attempting to output html.
edit: I added the requirement that it parse the third link http://i.imgur.com/OgQ9Uaf.jpg after the fact.
my final solution (based on @Cerbrus's answer):
function parseAndHandleHyperlinks(inString)
{
var result = inString.replace(/[(.+?)]((https?://.+?))/g, '<a href="$2">$1</a>');
return result.replace(/(?: |^)(https?://[a-zA-Z0-9/.(]+)/g, ' <a href="$1">$1</a>');
}
See Question&Answers more detail:
os