2012-05-25 2 views
1

Я пытаюсь выполнить перенос над выражением PHP preg_match, чтобы вытащить идентификатор видео из кода встраивания YouTube в Javascript. В настоящее время у меня это есть в PHP:Вытаскивание идентификатора видео из кода встраивания YouTube

$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); 

Это работает и возвращает мне идентификатор видео. Я попытался с помощью следующих для того, чтобы заставить его работать в 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 I получите следующую ошибку:

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'); 

Чтобы получить идентификатор в конце концов, используйте var id = reg.exec(yourString)[1].

+0

Спасибо, что, похоже, сделали трюк и теперь работает в порядке со следующим кодом: var reg =/(?: https?: \/\ /)? (?: www \.)? (?: youtu \ .be \/| youtube \ .com (?: \/код вставки \/| \/об \/| \/смотреть \ v =)) ([\ ш -] {10,12})/г; Однако он не возвращает идентификатор видео, а полный URL, тогда как PHP возвращает Array ([0] => http://www.youtube.com/embed/mHhieh0q_-A "[1] => mHhieh0q_-A) –

+0

См. Мой обновить о том, как правильно выполнить регулярное выражение, чтобы получить совпадения. – ThiefMaster

+0

Это замечательно. Большое спасибо. –

2

Вам необходимо избегать косых черт лица в вашем регулярном выражении: \/.

Смежные вопросы