Как я могу изменить это регулярное выражение, чтобы получить идентификатор видео Youtube с URL-адреса Youtube, в котором не указан параметр v? - PullRequest
5 голосов
/ 11 октября 2010

В настоящее время я использую это регулярное выражение для извлечения идентификатора видео из URL-адреса Youtube:

url.match(/v=([^&]*)/)[1]

Как я могу изменить это, чтобы он также получал идентификатор видео из этого URL-адреса Youtube,у которого нет параметра v:

http://www.youtube.com/user/SHAYTARDS#p/u/9/Xc81AajGUMU

Спасибо за чтение.

РЕДАКТИРОВАТЬ: я использую ruby ​​1.8.7

Ответы [ 3 ]

12 голосов
/ 25 января 2011

Для Ruby 1.8.7 это будет сделано.

url_1 = 'http://www.youtube.com/watch?v=8WVTOUh53QY&feature=feedf'
url_2 = 'http://www.youtube.com/user/ForceD3strategy#p/a/u/0/8WVTOUh53QY'

regex = /youtube.com.*(?:\/|v=)([^&$]+)/
puts url_1.match(regex)[1] # => 8WVTOUh53QY
puts url_2.match(regex)[1] # => 8WVTOUh53QY
2 голосов
/ 11 октября 2010

Нет необходимости использовать регулярное выражение

>> url="http://www.youtube.com/user/SHAYTARDS#p/u/9/Xc81AajGUMU"
=> "http://www.youtube.com/user/SHAYTARDS#p/u/9/Xc81AajGUMU"
>> (a = url["?v="]) ? url.split("?v=")[1] : url.split("/")[-1]
=> "Xc81AajGUMU"

>> url="http://www.youtube.com/watch?v=j5-yKhDd64s"
=> "http://www.youtube.com/watch?v=j5-yKhDd64s"
>> (a = url["?v="]) ? url.split("?v=")[1] : url.split("/")[-1]
=> "j5-yKhDd64s"
0 голосов
/ 11 октября 2010
 url.match(/[^\/]+$/)[0]

должно работать в этом случае. Это будет соответствовать всему, что следует за последней косой чертой в строке, поэтому, конечно, это будет намного больше, чем просто идентификаторы видео на Youtube. Из вашего вопроса я делаю вывод, что вы уже знаете, является ли ссылка ссылкой на Youtube или нет (поскольку ваше регулярное выражение также довольно неопределенно), но если вы этого не сделаете, попробуйте

url.match(/youtube.com.*([^\/]+$)/)[1]

Если вы не используете Ruby 1.9, вы не сможете сделать это за одно регулярное выражение, потому что Ruby 1.8 не поддерживает lookbehind.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...