Javascript 使用Youtube和非Youtube链接进行正则表达式URL解析

Javascript 使用Youtube和非Youtube链接进行正则表达式URL解析,javascript,regex,parsing,url,youtube,Javascript,Regex,Parsing,Url,Youtube,嗨,我今天的问题是使用正则表达式解析URL。我想首先将任何youtube url转换为嵌入式视频,然后将剩余的url(只是常规链接)转换为a href链接。我已经让这两个都起作用了,我的问题是在我转换了youtube url之后,第二个正则表达式替换会弄乱youtube视频,所以我需要它做的是忽略iframe标记。我将是第一个承认我在regex很糟糕的人,所以我真的非常感谢你的帮助,我认为对于一个半正派的regex人来说这不会太难 干杯, 约旦 函数linkifyYouTubeURLs(){

嗨,我今天的问题是使用正则表达式解析URL。我想首先将任何youtube url转换为嵌入式视频,然后将剩余的url(只是常规链接)转换为a href链接。我已经让这两个都起作用了,我的问题是在我转换了youtube url之后,第二个正则表达式替换会弄乱youtube视频,所以我需要它做的是忽略iframe标记。我将是第一个承认我在regex很糟糕的人,所以我真的非常感谢你的帮助,我认为对于一个半正派的regex人来说这不会太难

干杯, 约旦


函数linkifyYouTubeURLs(){
//用iframe替换youtubeurls
var re=/https?:\/\/(?:[0-9A-Z-]+\)(?:youtu\.be\/\124; youtube\.com(?:/embed\/\v\/\124\/watch\?v=/ytscreeningroom\?v=/feeds\/api\/videos\/\124\/user\S*[^\w\-\S]\S*[^\w\-\S])([\w\]{11}/-];
document.getElementById('CPH_Main_postContent')。innerHTML=document.getElementById('CPH_Main_postContent')。innerHTML.replace(re,

'); //用链接替换URL var exp=/(\b(https?| ftp |文件):\/\/[-A-Z0-9+&@#\/%?=~~|!:,.;]*[-A-Z0-9+&@#\/%=~|]/ig; document.getElementById('CPH_Main_postContent')。innerHTML=document.getElementById('CPH_Main_postContent')。innerHTML.replace(exp,“”); }

您可能应该一次性完成此操作,并使用函数作为替换:

<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>

这是youtube链接:http://www.youtube.com/watch?v=IUcD9YIAqJE

这是正常链接:http://www.google.com/


如果我的理解是正确的,您的问题是第二个替换也会替换youtube链接

要确保仅替换非youtube链接,请在第二个正则表达式中使用负前瞻,如下所示:

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

消极前瞻确保以下部分与youtu.be/或youtube.com不匹配,后跟零个或多个字符

太好了,非常感谢米哈伊尔,这完美地解决了问题!你是个救命恩人,真希望我能给你买杯啤酒!
/(\b(https?|ftp|file):\/\/(?!(?:youtu\.be\/|youtube\.com).*)[-A-Z0-9+&@#\/%?=~_|!:,.;]*[-A-Z0-9+&@#\/%=~_|])/ig