Javascript正则表达式可选字符

Javascript正则表达式可选字符,javascript,regex,Javascript,Regex,我使用一个正则表达式模式(从堆栈溢出中获得)从vimeo URL提取视频ID: var regExp = /http:\/\/(www\.)?vimeo.com\/(\d+)($|\/)/; var match = url.match(regExp); 我需要它来工作,无论是指定http还是https。我试过了 var regExp = /http(s)?:\/\/(www\.)?vimeo.com\/(\d+)($|\/)/; 但这在http和https上都失败了 帮助一位兄弟。如

我使用一个正则表达式模式(从堆栈溢出中获得)从vimeo URL提取视频ID:

var regExp = /http:\/\/(www\.)?vimeo.com\/(\d+)($|\/)/;
    var match = url.match(regExp);
我需要它来工作,无论是指定http还是https。我试过了

var regExp = /http(s)?:\/\/(www\.)?vimeo.com\/(\d+)($|\/)/;
但这在http和https上都失败了

帮助一位兄弟。

如果您想选择“s”选项,请仅使用

s?

i、 例如,
https?
将匹配http和https

它失败,因为您正在创建一个额外的捕获组,这意味着捕获组索引将与以前不同

要使
s
选项为空而不创建捕获组,只需添加
,不需要括号

/https?:\/\/(www\.)?vimeo.com\/(\d+)($|\/)/
要创建非捕获组,您可以使用
(?:)
,但此处不需要,仅显示示例:

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

这个正则表达式应该可以:

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

你能试试吗:
var regExp=/https?:\/\/(www\)?vimeo\.com\/(\d+)/
很惊讶为什么
(s)?
不匹配,而
s?
匹配。捕获组只是有一点不同。@RohitJain看到我的答案了,这不是因为它不再匹配,而是因为捕获组索引会改变,如果OP没有修改其余的代码,就会返回错误的匹配。是吗?表示字符是可选的。因此,它将涵盖http或HTTPST,但不一定解释其工作原理。给你:)