登录
首页 >  Golang >  Go问答

提取 Markdown 中的超链接

来源:stackoverflow

时间:2024-02-29 18:09:27 321浏览 收藏

各位小伙伴们,大家好呀!看看今天我又给各位带来了什么文章?本文标题《提取 Markdown 中的超链接》,很明显是关于Golang的文章哈哈哈,其中内容主要会涉及到等等,如果能帮到你,觉得很不错的话,欢迎各位多多点评和分享!

问题内容

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

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

这是我正在寻找的内容:

Input - [https://imgur.com/abc](https://imgur.com/bcd)
Should output the link - https://imgur.com/bcd

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


解决方案


您可以使用 regexp.findstringsubmatch 来获取单 url 验证正则表达式生成的捕获值:

package main

import (
    "fmt"
    "regexp"
)

func main() {
    markdownregex := regexp.mustcompile(`^\[[^][]+]\((https?://[^()]+)\)$`)
    results := markdownregex.findstringsubmatch("[https://imgur.com/abc](https://imgur.com/bcd)")
    fmt.printf("%q", results[1])
}

请参阅 GO demo online

您可以考虑使用 regexp.findallstringsubmatch 来查找所有出现的您需要的链接:

package main

import (
    "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])}
}

查看Go lang demo

该模式的含义是:

  • \[ - a [ 字符
  • [^][]+ - 除 [] 之外的 1 个以上字符
  • ]\( - ]( 子字符串
  • (https?://[^()]+) - 第 1 组:http,然后是可选的 s,然后是 :// 子字符串,然后是 以外的 1 个以上字符() )
  • \) - ) 字符。

请参阅 online regex demo

今天带大家了解了的相关知识,希望对你有所帮助;关于Golang的技术知识我们会一点点深入介绍,欢迎大家关注golang学习网公众号,一起学习编程~

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>