Дополнительный символ Jexcript Regex

У меня есть шаблон регулярных выражений, который я использую (получил его из Stack Overflow), чтобы извлечь идентификатор видео с URL-адреса vimeo:

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

Мне нужно, чтобы он работал, задан ли http или https. Я пробовал

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

Но это не работает как на http, так и на https.

Помогите брату.

Ответы

Ответ 1

Он терпит неудачу, потому что вы создаете дополнительную группу захвата, что означает, что индексы группы захвата не будут такими же, как раньше.

Чтобы сделать s optionnal без создания группы захвата, вы можете просто добавить ?, вам не нужны скобки.

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

Чтобы создать группу, не связанную с захватом, вы можете использовать (?:), но это необязательно здесь, просто показывая для примера:

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

Ответ 2

если вы хотите сделать "s", используйте только

s?

i.e., https? будет соответствовать http и https

Ответ 3

Это регулярное выражение должно работать:

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