-1

可能重复:
php regex - 在字符串中查找所有 youtube 视频 ID

我正在寻找一个函数,它允许我将所有 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')

with 是错误的

:-(

有人在做类似的事情并具有工作功能吗?我可以适应我的要求,但需要与我的要求有共同点。

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

4

1 回答 1

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参数而没有其他链接,因为那时也没有&字符。我将把该案例的完整解决方案留给您作为练习(-:

于 2012-08-13T08:50:42.360 回答