2013-10-24 15 views
18

Ich habe einen RegexMuster die ich benutze (hätte es von Stack-Überlauf), um eine Video-ID von einer vimeo URL zu extrahieren:Javascript Regex optional Charakter

var regExp = /http:\/\/(www\.)?vimeo.com\/(\d+)($|\/)/; 
    var match = url.match(regExp); 

ich es brauche, ob http zu arbeiten oder https angegeben. Ich habe versucht

var regExp = /http(s)?:\/\/(www\.)?vimeo.com\/(\d+)($|\/)/; 

Aber dies schlägt sowohl auf http und https.

Helfen Sie einem Bruder aus.

+2

Können Sie versuchen: 'var regExp =/https?: \/\/(Www \.)? Vimeo \ .com \/(\ d +) /;' – anubhava

+0

Sie gewinnen! Pop die Antwort als Antwort und ich gebe Ihnen das Häkchen – Fraser

+0

Überrascht, warum '(s)?' Nicht übereinstimmt und 's?' Tut. Es gibt nur einen Unterschied in der Erfassungsgruppe. –

Antwort

38

Es schlägt fehl, weil Sie eine zusätzliche Erfassungsgruppe erstellen, dass die Erfassung bedeutet, Gruppenindizes sind nicht dieselben wie zuvor.

Um die Option s zu erstellen, ohne eine Erfassungsgruppe zu erstellen, können Sie einfach ? hinzufügen, die Klammern sind nicht erforderlich.

/https?:\/\/(www\.)?vimeo.com\/(\d+)($|\/)/ 

Um eine nicht-einfangende Gruppe zu erstellen, können Sie (?:) verwenden können, aber das ist hier nicht notwendig, nur für das Beispiel zeigt:

/http(?:s)?:\/\/(www\.)?vimeo.com\/(\d+)($|\/)/ 
11

wenn Sie machen wollen „s“ Option, verwenden Sie nur

s? 

dh, https? entsprechen http und https

+0

wie funktioniert das aber? nur neugierig –

+1

die? bedeutet, dass das Zeichen optional ist. so wird es http oder https abdecken –

2

Diese Regex funktionieren sollte:

var regExp = /https?:\/\/(www\.)?vimeo\.com\/(\d+)/;