【问题标题】:Javascript Regex optional characterJavascript 正则表达式可选字符
【发布时间】:2013-10-24 15:05:36
【问题描述】:

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

帮助一个兄弟。

【问题讨论】:

  • 你可以试试:var regExp = /https?:\/\/(www\.)?vimeo\.com\/(\d+)/;
  • 很惊讶为什么(s)? 不匹配而s? 匹配。只是捕获组不同。
  • @RohitJain 查看我的答案,这不是因为它不再匹配,而是因为捕获组索引会改变,如果他没有修改其余代码,则将错误的匹配返回给 OP .

标签: javascript regex


【解决方案1】:

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

要使s 成为可选而不创建捕获组,您可以简单地添加?,不需要括号。

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

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

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

【讨论】:

    【解决方案2】:

    如果你想制作“s”选项,请只使用

    s?
    

    即,https? 将匹配 http 和 https

    【讨论】:

    【解决方案3】:

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

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

    【讨论】:

      猜你喜欢
      • 2019-07-22
      • 1970-01-01
      • 2014-07-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-06-11
      • 2016-01-24
      相关资源
      最近更新 更多