修复Javascript代码以将文本内的所有Youtube链接转换为使用Youtube ID运行

时间:2012-08-13 07:40:08

标签: javascript jquery regex parsing youtube

  

可能重复:
  php regex - find all youtube video ids in string

我正在寻找一个允许我将所有Youtube链接更改为带有ID的Javascript函数调用的函数。

我会告诉你我的代码,但这是错的......不按我的意愿工作......:

function find_and_replace_youtube_links(message)
{
    return message.replace(/(?:http:\/\/)?(?:www\.)?(?:youtube\.com|youtu\.be)\/(?:watch\?v=)?(.+)/g, 'play_youtube(\'$1\')');   
}

function play_youtube(youtube_id)
{
    $('#youtube_embed').html('something youtubeid something');   
}

致电

    alert(find_and_replace_youtube_links('test \n\
            http://www.youtube.com/watch?v=JGCsyshUU&feature=autoplay&list=sSPDBAE171ADC2D71FA&playnext=1\n\
\n\
testt http://www.youtube.com/watch?v=JGCsyshUU&feature=autoplay&list=sSPDBAE171ADC2D71FA&playnext=1 testt\n\
\n\
testtt'));

输出

test 
            play_youtube('JGCsyshUU&feature=autoplay&list=sSPDBAE171ADC2D71FA&playnext=1')

testt play_youtube('JGCsyshUU&feature=autoplay&list=sSPDBAE171ADC2D71FA&playnext=1 testt')

testtt

嗯...

问题在于:

 play_youtube('JGCsyshUU&feature=autoplay&list=sSPDBAE171ADC2D71FA&playnext=1')

你可以看到,它解析了所有链接,而不仅仅是id 它应该给我

play_youtube('JGCsyshUU');

而不是

play_youtube('JGCsyshUU&feature=autoplay&list=sSPDBAE171ADC2D71FA&playnext=1')

有错误

: - (

任何做类似事情并且有工作功能的人? 我可以适应我的要求,但需要与我的要求有一些共同之处。

http://www.youtube.com/watch?v=JGCsyshUU-A

1 个答案:

答案 0 :(得分:0)

您的正则表达式从v参数开始抓取URI的其余查询字符串。

您想要的只是获取v参数并忽略所有以下参数。

参数由&字符分隔,因此不要将所有字符与(.+)匹配,请尝试将所有“非&字符”与([^&]+)匹配。

以下是该函数的修改版本:

function find_and_replace_youtube_links(message)
{
    return message.replace(/(?:http:\/\/)?(?:www\.)?(?:youtube\.com|youtu\.be)\/(?:watch\?v=)?([^&]+).*/g, 'play_youtube(\'$1\')');   
}

现在,如果你在只有v参数的链接而没有其他链接的文本上运行它仍然会失败,因为那时也没有&个字符。我将把这个案例的完整解决方案作为练习留给你( - :