37

我有一个正则表达式模式,我正在使用(从 Stack Overflow 获得)从 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 上都失败了。

帮小弟解围。

4

3 回答 3

75

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

要在s不创建捕获组的情况下创建选项,您可以简单地添加?,您不需要括号。

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

要创建非捕获组,您可以使用(?:),但这不是必需的,仅显示示例:

/http(?:s)?:\/\/(www\.)?vimeo.com\/(\d+)($|\/)/
于 2013-10-24T15:14:28.397 回答
18

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

s?

即,https?将匹配 http 和 https

于 2013-10-24T15:10:09.510 回答
3

这个正则表达式应该工作:

var regExp = /https?:\/\/(www\.)?vimeo\.com\/(\d+)/;
于 2013-10-24T15:15:26.000 回答