猿问

如何从markdown中提取链接

我正在尝试解析可能是超链接或降价中的超链接的输入。我可以很容易地检查它是否是一个超链接^https?://.+$并使用 regexp.Match,但是对于降价链接,它对我来说是一个完全不同的兔子洞。

我遇到了这个正则表达式^\[([\w\s\d]+)\]\((https?:\/\/[\w\d./?=#]+)\)$,我试图修改它以匹配降价链接,但是在由于某种原因捕获了最后一个括号之后,我一直在寻找仅匹配第二个捕获组,链接,与 SubexpNames,FindStringIndex 之类的东西, FindSubmatch, Split 等等,但它们似乎都没有捕捉到我正在寻找的东西(有时它们无论如何都会返回整个字符串)或者很可能我做错了。

这就是我要找的东西:

Input - [ 
Should output the link - https://imgur.com/bcd

到目前为止,这是我的代码:https: //play.golang.org/p/OiJE3TvvVb6


至尊宝的传说
浏览 115回答 1
1回答

天涯尽头无女友

您可以使用regexp.FindStringSubmatch获取由您的单 URL 验证正则表达式产生的捕获值:package mainimport (    "fmt"    "regexp")func main() {    markdownRegex := regexp.MustCompile(`^\[[^][]+]\((https?://[^()]+)\)$`)    results := markdownRegex.FindStringSubmatch("[https://imgur.com/abc](https://imgur.com/bcd)")    fmt.Printf("%q", results[1])}您可以考虑使用regexp.FindAllStringSubmatch来查找您需要的所有链接:package mainimport (    "fmt"    "regexp")func main() {    markdownRegex := regexp.MustCompile(`\[[^][]+]\((https?://[^()]+)\)`)    results := markdownRegex.FindAllStringSubmatch("[https://imgur.com/abc](https://imgur.com/bcd) and [https://imgur.com/xyy](https://imgur.com/xyz)", -1)    for v := range results {fmt.Printf("%q\n", results[v][1])}}图案的意思是:\[- 一个[字符[^][]+- 1+ 字符以外的[和]]\(- ](子串(https?://[^()]+) - 第 1 组:http,然后是可选的s,然后是 子字符串,然后是除and之外的://1+ 个字符()\)- 一个)字符。请参阅在线正则表达式演示。
随时随地看视频慕课网APP

相关分类

Go
我要回答