使用正则表达式简化javascript代码(获得指向iframes youtube的多个链接)

使用正则表达式简化javascript代码(获得指向iframes youtube的多个链接),javascript,regex,Javascript,Regex,嗨 我有一个代码,可以显示youtube视频,如果有任何链接到youtube的文本 例如,有多个链接的文本 测试 示例如下: 这个问题有三个部分,可以使用正则表达式来完成 1>逐个获取URL以进行检查 2> 正在检查是否存在youtube URL 3> 正在将URL转换为youtube对象或iFrame 第二个和第三个几乎都是用正则表达式完成的。。欢迎任何改进 最麻烦的是代码的第一部分,它将使用正则表达式来完成 我正在将此文本转发到函数 function to_youtubelink(

嗨 我有一个代码,可以显示youtube视频,如果有任何链接到youtube的文本

例如,有多个链接的文本

测试

示例如下:

这个问题有三个部分,可以使用正则表达式来完成

1>逐个获取URL以进行检查

2> 正在检查是否存在youtube URL

3> 正在将URL转换为youtube对象或iFrame

第二个和第三个几乎都是用正则表达式完成的。。欢迎任何改进

最麻烦的是代码的第一部分,它将使用正则表达式来完成

我正在将此文本转发到函数

   function to_youtubelink(text)
            {
                if ( text.indexOf ('<') > 0 || text.indexOf ('"') > 0 || text.indexOf ('>') > 0 )
                    return text;
                else
                {
                    var obj_text = new Array();
                    var oi = 0;
                    while(text.indexOf('http://') >=0)
                    { //getting the paths
                        var si = text.indexOf('http://');
                        var gr = text.indexOf('\n', si);
                        var sp = text.indexOf(' ', si);
                        var ei;
                        if ( gr > 0 || sp > 0  )
                        {
                            if ( gr >0 && sp > 0 )
                            {
                                if ( gr < sp )
                                {
                                    ei = gr ;
                                }
                                else
                                {
                                    ei = sp ;
                                }
                            }
                            else if ( gr > 0)
                            {
                                ei = gr;
                            }
                            else
                            {
                                ei = sp;
                            }
                        }
                        else
                        {
                            ei = text.length;
                        }
                        var it = text.substring(si,ei);

                        if ( it.indexOf('"') > 0)
                        {
                            it.substring(0, it.indexOf('"') );
                        }

                        if(ei < 0)
                            ei = text.length;
                        else
                            ei = text.indexOf(' ', si) ;

                        obj_text[oi] = it;

                        text = text.replace( it, '[link_service]');
                        oi++;

                    }

                    var ob_text = new Array();
                    var ob =0;
                    for (oi=0; oi<obj_text.length; oi++)
                    {
                        if ( is_youtubelink( obj_text[oi] ) )
                        {
                            ob_text[ob] = to_utubelink(obj_text[oi]);

                            ob++;
                        }
                    }
                    oi = 0;
                    while ( text.indexOf('[link_service]') >=0  )
                    {

                        text = text.replace( '[link_service]', obj_text[oi]);

                        oi ++;
                    }

                    for (ob=0; ob<ob_text.length; ob++)
                    {
                        text = text +"\n\n" + ob_text[ob];
                    }

                    return text;
                }
            }

       function is_youtubelink(text)
            {
                var matches = text.match(/http:\/\/(?:www\.)?youtube.*watch\?v=([a-zA-Z0-9\-_]+)/);
                if (matches) {
                    return true;
                } else {
                    return false;
                }

            }

            function to_utubelink(text)
            {
                var video_id = text.split('v=')[1];
                    var ampersandPosition = video_id.indexOf('&');
                    if(ampersandPosition != -1)
                    {
                        video_id = video_id.substring(0, ampersandPosition);
                    }

                    text = "<iframe title=\"YouTube video player\" class=\"youtube-player\" type=\"text/html\" width=\"425\" height=\"350\" src=\"http://www.youtube.com/embed/" + video_id + "\" frameborder=\"0\"></iframe>"
                    return text;
            }
函数到_youtubelink(文本)
{

如果(text.indexOf(“请尝试以下操作:

/**
 * Extracts a youtube id from a string
 * 
 * @param string
 *
 * @return mixed
 */

function youtubeIDextract(text) { 
    var replace = "$1";

    if (!text.match(/http:\/\/www\.youtube[^"]+/))
        return false;

    if (text.match(/^[^v]+v.([^&^=^\/]{11}).*/))
        return text.replace(/^[^v]+v.([^&^=^\/]{11}).*/,replace); 
    else if (text.match(/^[^v]+\?v=([^&^=^\/]{11}).*/))
        return text.replace(/^[^v]+\?v=([^&^=^\/]{11}).*/,replace); 
    else
        return false;
}
这里可以看到一个工作示例:

如果您只想检查某个地方是否有youtube链接,请执行以下操作:

if (youtubeIDextract(text)) {...}
请注意,这还会检查视频id中是否有11个字符(如果没有11个字符,它将是格式错误的youtube链接)。

试试这个:

function to_youtubelink(a) {
if (a.indexOf("<") > 0 || a.indexOf('"') > 0 || a.indexOf(">") > 0) return a;
var b = Array(),
    c = 0;
while (a.indexOf("http://") >= 0) {
    var g, d = a.indexOf("http://"),
        e = a.indexOf("\n", d),
        f = a.indexOf(" ", d);
    g = e > 0 || f > 0 ? e > 0 && f > 0 ? f > e ? e : f : e > 0 ? e : f : a.length;
    var h = a.substring(d, g);
    h.indexOf('"') > 0 && h.substring(0, h.indexOf('"')), g = 0 > g ? a.length : a.indexOf(" ", d), b[c] = h, a = a.replace(h, "[link_service]"), c++
}
var i = Array(),
    j = 0;
for (c = 0; b.length > c; c++) is_youtubelink(b[c]) && (i[j] = to_utubelink(b[c]), j++);
c = 0;
while (a.indexOf("[link_service]") >= 0) a = a.replace("[link_service]", b[c]), c++;
for (j = 0; i.length > j; j++) a = a + "\n\n" + i[j];
return a
}
function is_youtubelink(a) {
var b = a.match(/http:\/\/(?:www\.)?youtube.*watch\?v=([a-zA-Z0-9\-_]+)/);
return b ? !0 : !1
}
function to_utubelink(a) {
var b = a.split("v=")[1],
    c = b.indexOf("&");
return c != -1 && (b = b.substring(0, c)), a = '<iframe title="YouTube video player" class="youtube-player" type="text/html" width="425" height="350" src="http://www.youtube.com/embed/' + b + '" frameborder="0"></iframe>'
}
函数到_youtubelink(a){

if(a.indexOf(“我已经在函数“to_utubelink”(我代码的最后一个函数)中这么做了)…也许这是一个更好的实现…@Pradyut:等等,现在调整一下。我对正则表达式不太了解,但看看是否url来自youtube,在我的函数中有一个更宽的正则表达式”是“…谢谢…在链接中,你只有一个youtube链接…用我的文本运行多个youtube链接…不急顺便说一句:D@Pradyut:嗯,是的,它似乎不符合所有的情况。我正在努力解决这个问题。