次の形式のリンクを含む解析テキストが必要です。
[html title](http://www.htmlpage.com)
http://www.htmlpage.com
http://i.imgur.com/OgQ9Uaf.jpg
これら 2 つの文字列の出力は次のようになります。
<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>
文字列には、これらのリンクを任意の数だけ含めることができます。つまり、次のようになります。
[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
出力:
<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>
文字列を 3 回渡すことで問題なく機能する非常に長い関数がありますが、この文字列を正常に解析できません。
[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.
簡潔にするために、検索/置換関数全体ではなく、試した正規表現を投稿します。
var matchArray2 = inString.match(/\[.*\]\(.*\)/g);
for matching 、 が一致する[*](*)
ため機能しません[]()[]()
ほんとに、そうなんでしょうね。その一致を確認したら、その一致を検索して ( ) と [ ] を検索し、リンクを解析してリンク テキストを抽出し、href タグを作成します。単純なハイパーリンクを見つけるために 2 回目のパスを実行するときに一致しないように、一時文字列から一致を削除します。
var plainLinkArray = tempString2.match(/http\S*:\/\/\S*/g);
私は正規表現でhtmlを解析していません。文字列を解析してhtmlを出力しようとしています。
編集:事後に3番目のリンクhttp://i.imgur.com/OgQ9Uaf.jpgを解析するという要件を追加しました。
私の最終的な解決策(@Cerbrusの回答に基づく):
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>');
}