2012-05-25 47 views
1

我试图通过PHP preg_match表达式将端口从YouTube嵌入代码拖入Javascript中。我目前有这在PHP:从YouTube中提取视频ID嵌入代码

$pattern = '%(?:https?://)?(?:www\.)?(?:youtu\.be/| youtube\.com(?:/embed/|/v/|/watch\?v=))([\w-]{10,12})[a-zA-Z0-9\<\>\"]%x'; 
$result = preg_match($pattern, $url, $matches); 

这工作,并返回给我一个视频ID。我已经尝试使用,以得到它在Javascript工作如下:我使用

var reg = /(?:https?://)?(?:www\.)?(?:youtu\.be/|youtube\.com(?:/embed/|/v/|/watch\?v=))([\w-]{10,12})/g; 
var matches = uploadVideoEmbedCode.match(reg); 

测试数据是:

<iframe width="560" height="315" src="http://www.youtube.com/embed/1NMUDb3Ewhs" frameborder="0" allowfullscreen></iframe> 

当我尝试在JavaScript中使用我上述正则表达式得到以下错误:

Uncaught SyntaxError: Unexpected token ?

你的帮助将永远不胜感激。

+0

你不觉得你应该在你的博客上给答案所有者的功劳吗? http://www.neilyoungcv.com/blog/code-share/retrieving-youtube-video-id-from-embed-code-using-php-and-javascript/ –

回答

4

您需要在正则表达式中跳过/斜线,因为它们是分隔符。使用\/只要你想匹配一个/

var reg = /(?:https?:\/\/)?(?:www\.)?(?:youtu\.be\/|youtube\.com(?:\/embed\/|\/v\/|\/watch\?v=))([\w-]{10,12})/g; 

另一种选择是使用new RegExp('...', 'g')代替/.../g - 但你一定要逃逸每个反斜线这将是更讨厌:

var reg = new RegExp('(?:https?://)?(?:www\\.)?(?:youtu\\.be/|youtube\\.com(?:/embed/|/v/|/watch\\?v=))([\\w-]{10,12})', 'g'); 

要最终获得ID,请使用var id = reg.exec(yourString)[1]

+0

谢谢,这似乎已经完成了这个诀窍,现在可以使用以下代码:var reg = /(?: https?:\/\ /)?(?: www \。)?(?: youtu \ .be \/| youtube \ .com(?: \ /嵌入\/| \/v \/| \ /观看\ v =))([\瓦特 - ] {10,12})/克?;但它不返回视频ID,但完整的url,而PHP返回Array([0] => http://www.youtube.com/embed/mHhieh0q_-A“[1] => mHhieh0q_-A) –

+0

看到我的更新如何正确执行正则表达式以获得匹配 – ThiefMaster

+0

这是完美的,非常感谢你 –

2

您必须在正则表达式中跳出正斜杠:\/