我正在寻找一个允许我将所有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')
有错误
: - (
任何做类似事情并且有工作功能的人? 我可以适应我的要求,但需要与我的要求有一些共同之处。
答案 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
参数的链接而没有其他链接的文本上运行它仍然会失败,因为那时也没有&
个字符。我将把这个案例的完整解决方案作为练习留给你( - :