Javascript 正则表达式:在GitHub标记中匹配图像URL?

Javascript 正则表达式:在GitHub标记中匹配图像URL?,javascript,regex,github,markdown,Javascript,Regex,Github,Markdown,这可能是一个非常简单的问题,但我对正则表达式很糟糕 我希望匹配GitHub标记中的图像,如下所示: ![Icon](icon.png?raw=true) ![Icon](icon.jpg?raw=true) ![Icon](thumb.jpg?raw=true) ![Icon](icon512.png?raw=true) ![Icon](android-chrome-512x512.png?raw=true) 我正在尝试匹配以下内容: icon.png?raw=true icon.jpg?ra

这可能是一个非常简单的问题,但我对正则表达式很糟糕

我希望匹配GitHub标记中的图像,如下所示:

![Icon](icon.png?raw=true)
![Icon](icon.jpg?raw=true)
![Icon](thumb.jpg?raw=true)
![Icon](icon512.png?raw=true)
![Icon](android-chrome-512x512.png?raw=true)
我正在尝试匹配以下内容:

icon.png?raw=true
icon.jpg?raw=true
thumb.jpg?raw=true
icon512.png?raw=true
android-chrome-512x512.png?raw=true
如果可能的话,我尝试只匹配.jpg和.png文件(包括?raw=true)

我不知道这是否可能,但由于我使用的是Javascript函数,如果只有一个匹配项,这将非常有帮助,以避免索引匹配项,如下所示:

编辑:这里是一些上下文,这是我正在尝试的:

var路径=[
“![Icon](Icon.png?raw=true)”,
“![Icon](Icon.jpg?raw=true)”,
“![Icon](thumb.jpg?raw=true)”,
“![Icon](icon512.png?raw=true)”,
“![Icon](android-chrome-512x512.png?raw=true)
]
对于(var i=0;iconsole.log(路径[i].match(/(?我无法理解您真正想要做什么,但您期望的正则表达式如下所示:

\!\[Icon\]\(((?:.*)\.(?:png|jpg).*)\)
这将获得扩展名为?raw=true的图像或仅附加到其上的图像:

icon.png?raw=true icon.jpg?raw=true thumb.jpg?raw=true icon512.png?raw=true android-chrome-512x512.png?raw=true

这将获取像“icon.png?raw=true”这样的字符串,并将其放在第一个捕获组中

!\[Icon\]\((.+)\)
如果您只需要图像URL,可以使用以下选项:

!\[Icon\]\((.+\.\w+).*\)
尝试以下模式:
\(?p.+?(\.png\.jpg\.jpeg\.bmp))

名为
filename
的捕获组将包含文件名

说明:

首先,将
与模式
\(
)匹配,然后开始命名捕获组:任意字符一次或多次,非贪婪,直到某个图像扩展名
+?(\.png\.jpg\.jpeg\.bmp)
。不贪婪是很重要的,因为如果文件后面有另一个文件名,扩展名为on,那么它将一直匹配到第二个文件

编辑

OP:我只是想知道是否可以匹配整个文件名而不匹配其他文件名


回答:是的,只需使用此模式:
(?您可以首先匹配
![Icon](
),然后在第1组中捕获括号之间的内容,最后再次匹配右括号

  • !\[Icon\]
    匹配![Icon]
  • \(
    匹配左括号
  • 捕获包含要匹配的值的组
    • +?
      将任何字符匹配一次或多次
    • \。
      匹配一个点
    • (?:png | jpg)
      匹配png或jpg的非捕获组
    • [^)]*
      将匹配零次或多次的否定字符类,而不是右括号
  • 关闭捕获组
  • \)
    匹配右括号
var路径=[
“![Icon](Icon.png?raw=true)”,
“![Icon](Icon.jpg?raw=true)”,
“![Icon](thumb.jpg?raw=true)”,
“![Icon](icon512.png?raw=true)”,
“![Icon](android-chrome-512x512.png?raw=true)
];
对于(var i=0;i}
您是否尝试过自己编写任何东西?请发布您所编写的代码tried@CertainPerformance用我糟糕的regexThank更新了帖子谢谢!我只是想知道是否有可能匹配整个文件名而不匹配其他内容(包括?raw=true)更新了答案请检查谢谢您的所有工作!对此我深表歉意,但我还有一个请求:是否可以只匹配一件事?当我使用Javascript测试表达式时,match函数将返回匹配组和完全匹配。如果我使用[0]对返回值进行索引,它将起作用,但我只是希望有一种方法可以解决这个问题。你在这里否决了所有其他答案吗?看起来,你的答案是唯一一个没有被否决的答案,你今天投了三票。另外,你的答案与“第四鸟答案”非常相似。@MichałTurczyn否决了所有答案,希望你知道答案不会改变1小时的投票后。谢谢!我只是想知道是否有可能匹配整个文件名,其他什么都不知道。我对所有答案都投了赞成票,我不知道是谁投了反对票。这似乎效果很好,但我只是想问,当我测试exp时,是否有可能避免组匹配,只匹配URL使用Javascript时,match函数会返回匹配组和完整匹配。如果我用[0]索引返回的值,它会起作用,但我只是希望有一种方法可以解决这个问题,您可以使用具有正向查找功能的版本。在这个版本中
(*)
更改为
*?
,因为您不需要捕获组进行匹配,现在匹配第一个右括号是不贪婪的。请注意,并非所有浏览器都支持正向查找。非常感谢,这正是我要找的!请将此添加为答案,以便我可以接受。此外,我不支持“我不知道这是否可行,但是否可以只匹配.jpg和.png?@MysteryPancake这是可能的。我已经为我的答案添加了一个更新。当然,在匹配jpg或png后,您可以使用否定字符类
[^]*
,以匹配非右括号。”