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