Дополнительный символ 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+)/;