2017-03-06 3 views
-1

入力したyoutube urlから正規表現でVideo IDを取得しようとしています。以下は正規表現が無効です - 何も繰り返されません - Javascript

は、私が使用している正規表現です:

/^.*(youtu.be\/|v\/|u\/\w\/|embed\/|watch\?v=|\&v=|\?v=)([^#\&\?]*).*/ 

しかし、それは

Uncaught SyntaxError: Invalid regular expression: //^.*(youtu.be/|v/|u/w/|embed/|watch?v=|&v=|?v=)([^#&?]*).*// : Nothing to repeat

なぜとして戻ってきますの?以下は

私のコードです:

function PreviewVideo() { 
var self = this; 
this.links = $(".videoPreview"); 

this.bindEvents = function() { 
    self.links.on("click", self.fireModal); 
}; 
this.getYoutubeId = function (url) { 

    var regExp = /^.*(youtu.be\/|v\/|u\/\w\/|embed\/|watch\?v=|\&v=|\?v=)([^#\&\?]*).*/; 
    var match = url.match(regExp); 
    if (match && match[2].length == 11) { 
     return match[2]; 
    } else { 
     return false; 
    } 
}; 
this.fireModal = function (e) { 
    e.preventDefault; 
    var $this = $(this); 
    var videoField = $this.data("video"); 
    var videoURL = $(videoField).val(); 

    if (videoURL === "") { 
     $("body").append(UI.toast({level: "danger", time: 5000, html: "<h4>No video URL found</h4>", dismissable: true, position: "top-right"})); 
    } else { 
     var videoID = self.getYoutubeId(videoURL); 
     if (videoID) { 
      UI.modal({title: "Video preview", body: '<iframe width="560" height="315" src="//www.youtube.com/embed/' + videoID + '" frameborder="0" allowfullscreen></iframe>'}) 
     } else { 
      $("body").append(UI.toast({level: "danger", time: 5000, html: "<h4>Invalid URL</h4>", dismissable: true, position: "top-right"})); 
     } 
    } 
}; 

this.bindEvents(); 

}

+0

youtube.be'は、正規表現の終わりとみなされ、 '/' '後。あなたはそれをエスケープする必要があります。 –

+0

@FabianKlötzl:それはエスケープされ、コードは正しくマークアップされていませんでした。 –

+0

[Javascript REGEX:URLからYouTube動画IDを取得する方法は?](http://stackoverflow.com/questions/3452546/javascript-regex-how-to-get-youtube-video-id-from-url ) –

答えて

1

エラーメッセージから見ることができるように、何らかの形であなたのコードによって生成された正規表現が有効ではありません。

//^.*(youtu.be/|v/|u/w/|embed/|watch?v=|&v=|?v=)([^#&?]*).*// 

この理由は、文字列の中に正規表現リテラル全体を入れているからです。

var regExp = "/^.*(youtu.be\/|v\/|u\/\w\/|embed\/|watch\?v=|\&v=|\?v=)([^‌​#\&\?]*).*/"; 

これは\はあなたが&v=|\?v=を書くときに、どのような正規表現エンジンに渡されることは&v=|?v=である(と|?が有効でない)、また、文字列リテラルのエスケープチャーターでもあって、動作することはできません。

は、単にリテラルの正規表現を使用します。

var regExp = /^.*(youtu.be\/|v\/|u\/\w\/|embed\/|watch\?v=|\&v=|\?v=)([^‌​#\&\?]*).*/; 
+0

フェリックス、私は以下の完全なコードを追加しました。 –

+0

私の質問が変更されました –

+0

ブラウザのコンソールに関数全体がコピーされましたが、構文エラーが発生しませんでした。正規表現に関連するコードは問題ありません。 –

関連する問題