修复Javascript代码以将文本中的所有Youtube链接转换为Youtube ID功能



可能的重复项:
PHP 正则表达式 - 在字符串中查找所有 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=1n
n
testt http://www.youtube.com/watch?v=JGCsyshUU&feature=autoplay&list=sSPDBAE171ADC2D71FA&playnext=1 testtn
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

正则表达式从 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 参数而没有其他链接,这仍然会失败,因为这样也不会有&字符。我将把这种情况的完整解决方案留给您作为练习(-:

最新更新