【问题标题】:Regex match giturl with optional file name正则表达式将 giturl 与可选文件名匹配
【发布时间】:2026-01-16 13:15:01
【问题描述】:

我需要从 github gist url 获取两部分(用户名/gistid 和文件名)。

到目前为止,我得到了这个:

  const gisturl = "https://gist.github.com/vanaf1979/329abed564c2ba10eda29a53b399ac69#file-parse-wp-rest-api-1-parse-js";
  const myRegexp = /\.com\/+(.*)?#file-(.*)/gi;
  const matches = myRegexp.exec(gisturl);
  console.log(matches);

这给了我

0: ".com/vanaf1979/329abed564c2ba10eda29a53b399ac69#file-parse-wp-rest-api-1-parse-js"
1: "vanaf1979/329abed564c2ba10eda29a53b399ac69"
2: "parse-wp-rest-api-1-parse-js"

到目前为止一切顺利,除了文件名 (#file-parse-wp-rest-api-1-parse-js) 是可选的,如果我从字符串中删除它,正则表达式不再匹配。

所以我需要正则表达式来匹配带有或不带有文件名的大小写。

任何帮助将不胜感激。

【问题讨论】:

    标签: javascript regex url


    【解决方案1】:

    您可以将第一部分更改为使用否定字符类而不是 [^#]+ 匹配除 # 之外的任何字符

    然后您可以将第二部分设为可选,并为file-之后的部分保留捕获组

    注意,正斜杠\/+后面的加号可以省略

    \.com\/([^#]+)(?:#file-(.*))?
    

    Regex demo

    【讨论】:

    • 这就像一个魅力!谢谢,也为解释!你摇滚! :p
    最近更新 更多