2013-03-12 148 views
0

嗨,我今天的問題是使用正則表達式來解析URL。我想先將任何YouTube網址轉換爲嵌入視頻,然後將剩餘的網址(只是常規鏈接)轉換爲href鏈接。我已經得到了這兩個工作,我的問題是,我已經得到了YouTube的網址轉換後的第二個正則表達式替換了YouTube上的視頻,所以我需要做的是忽略iframe標籤理想。我會第一個承認我在正則表達式中非常可怕,所以我會非常感謝一些幫助,我認爲對於那些有正則表達式的人來說這不會太困難。使用Youtube和非Youtube鏈接解析正則表達式URL

乾杯, 喬丹

<script type="text/javascript"> 
function linkifyYouTubeURLs() { 

    //replaces youtubeurls with iframe 
    var re = /https?:\/\/(?:[0-9A-Z-]+\.)?(?:youtu\.be\/|youtube\.com(?:\/embed\/|\/v\/|\/watch\?v=|\/ytscreeningroom\?v=|\/feeds\/api\/videos\/|\/user\S*[^\w\-\s]|\S*[^\w\-\s]))([\w\-]{11})[?=&+%\w-]*/ig; 
    document.getElementById('CPH_Main_postContent').innerHTML = document.getElementById('CPH_Main_postContent').innerHTML.replace(re, '<br><iframe title="YouTube video player" class="youtube-player" type="text/html" width="425" height="350" src="http://www.youtube.com/embed/$1" frameborder="0"> </iframe><br>'); 

    //replaces urls with links 
    var exp = /(\b(https?|ftp|file):\/\/[-A-Z0-9+&@#\/%?=~_|!:,.;]*[-A-Z0-9+&@#\/%=~_|])/ig; 
    document.getElementById('CPH_Main_postContent').innerHTML = document.getElementById('CPH_Main_postContent').innerHTML.replace(exp, "<a href='$1'>$1</a>"); 

} 

回答

0

你或許應該這樣做,在道次和使用功能的更換:

<html> 
    <head> 
    <script type="text/javascript"> 
<!-- 
function linkifyURL (match, offset, string) 
{ 
    var re =/https?:\/\/(?:[0-9A-Z-]+\.)?(?:youtu\.be\/|youtube\.com(?:\/embed\/|\/v\/|\/watch\?v=|\/ytscreeningroom\?v=|\/feeds\/api\/videos\/|\/user\S*[^\w\-\s]|\S*[^\w\-\s]))([\w\-]{11})[?=&+%\w-]*/ig; 

    var m = re.exec (match); 
    if (m) 
    { 
     return '<br><iframe title="YouTube video player" class="youtube-player" type="text/html" width="425" height="350" src="http://www.youtube.com/embed/' + m[1] + '" frameborder="0"></iframe><br>'; 
    } 
    else return '<a href="' + match + '">' + match + '</a>'; 
} 

function linkifyYouTubeURLs() 
{ 
    var element = document.getElementById ('CPH_Main_postContent'); 

    element.innerHTML = element.innerHTML.replace (/\b(?:https?|ftp|file):\/\/[-A-Z0-9+&@#\/%?=~_|!:,.;]*[-A-Z0-9+&@#\/%=~_|]/ig, linkifyURL); 
} 
// --> 
    </script> 
    </head> 
    <body id="CPH_Main_postContent" onload="linkifyYouTubeURLs();"> 
    <p>This is youtube link: http://www.youtube.com/watch?v=IUcD9YIAqJE</p> 
    <p>This is normal link: http://www.google.com/</p> 
    </body> 
</html> 
+0

非常感謝Mikhail,它完美地解決了它!你是一個拯救生命的人,希望我能給你買一瓶啤酒! – 2013-03-12 06:54:35

0

如果我的理解是正確的,你的問題是第二次替換也會替換youtube鏈接。

爲了確保只有非YouTube鏈路被替換,在第二正則表達式爲使用負先行:

/(\b(https?|ftp|file):\/\/(?!(?:youtu\.be\/|youtube\.com).*)[-A-Z0-9+&@#\/%?=~_|!:,.;]*[-A-Z0-9+&@#\/%=~_|])/ig 

負先行確保以下部分不匹配youtu.be/或YouTube .com,然後是零個或多個字符

+0

不幸的是,我沒有爲我工作! – 2013-03-12 06:54:11