Регулярное выражение Javascript для извлечения идентификаторов Youtube видео - PullRequest
2 голосов
/ 19 апреля 2011

Следующий код используется для получения идентификаторов видео с YouTube для получения уменьшенного изображения.

В чем причина первого регулярного выражения и что именно оно делает? Похоже, что возвращает как минимум два результата. Кроме того, могут ли они быть объединены?

else if(url.match("youtube.com/")){

    var vid;
    var results;

    //http://www.youtube.com/watch?v=GItD10Joaa0
    results = url.match("[\\?&]v=([^&#]*)");

    vid = ( results === null ) ? url : results[1];

    return "http://img.youtube.com/vi/"+vid+"/2.jpg";
} else if( url.match("youtu.be/") ) {

    var vid;
    var results;

    // http://youtu.be/5uxd-521uus?hd=1
    // results = url.match("[^http://youtu.be/](.*)[^?hd=1]");
    // Corrected
    results = url.match(""^http://youtu.be/(.*)(?=hd=1)");

    //alert(results[0]);
    vid = ( results === null ) ? url : results[0];

    return "http://img.youtube.com/vi/"+vid+"/2.jpg";
}

Ответы [ 4 ]

5 голосов
/ 19 апреля 2011
"[\\?&]v=([^&#]*)"

объяснил (после сокращения из строки JavaScript в регулярное выражение):

[\?&]   # Match a ? or a & (the backslash is unnecessary here!)
v=      # Match the literal text "v="
(       # Capture the following into backreference no. 1:
 [^&#]* # Zero or more characters except & or #
)       # End of capturing group.

Второе регулярное выражение [^http://youtu.be/](.*)[^?hd=1] очень неправильно.

Это, вероятно, должно читаться

"^http://youtu.be/(.*)(?=hd=1)"
1 голос
/ 19 апреля 2011

Хорошо, я немного порыбачил и наткнулся на это регулярное выражение. Это должно соответствовать цели, описанной выше.

youtu(?:\.be|be\.com)/(?:.*v(?:/|=)|(?:.*/)?)([a-zA-Z0-9-_]+)

От: C # регулярное выражение для получения идентификатора видео с YouTube и Vimeo по URL

А: http://forrst.com/posts/Automatic_YouTube_Thumbnails_with_PHP_and_Regex-uta

1 голос
/ 19 апреля 2011

1-е регулярное выражение проверяет «? V = GItD10Joaa0», когда URL-адрес похож на «youtube.com/» а 2-й проверяет "www.youtube.com/index?feature=youtu.be", когда URL-адрес "http://www.youtube.com/index?feature=youtu.be"

Таким образом, вы можете просто использовать 1-е регулярное выражение, если хотите получить идентификаторы из 1-го URL-адреса, а также:)

1 голос
/ 19 апреля 2011

Если вы имеете в виду ...

results = url.match("[\\?&]v=([^&#]*)");

Тогда это соответствует литералу \, ? или &, за которым следует литерал v=, за которым следует группа захвата, которая являетсязахватывает 0 или более любых символов, которые не & или #.

...