Javascript正则表达式可选字符

Fra*_*ser 26 javascript regex

我有一个正在使用的正则表达式模式(从Stack Overflow获取)从vimeo URL中提取视频ID:

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

无论是否指定了http或https,我都需要它.我试过了

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

但是http和https都失败了.

帮助一个兄弟.

pla*_*alx 56

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

s创建选项而不创建捕获组,您只需添加?,您不需要括号.

/https?:\/\/(www\.)?vimeo.com\/(\d+)($|\/)/
Run Code Online (Sandbox Code Playgroud)

要创建非捕获组,您可以使用(?:),但这里没有必要,只显示示例:

/http(?:s)?:\/\/(www\.)?vimeo.com\/(\d+)($|\/)/
Run Code Online (Sandbox Code Playgroud)


小智 13

如果你想做"s"选项,请仅使用

s?
Run Code Online (Sandbox Code Playgroud)

即,https?将匹配http和https


anu*_*ava 5

这个正则表达式应该有效:

var regExp = /https?:\/\/(www\.)?vimeo\.com\/(\d+)/;
Run Code Online (Sandbox Code Playgroud)