Regex 使用 C# 将 Markdown 内联 link 转换为 HTML link

Regex convert a Markdown inline link into an HTML link with C#

我正在用 C# 编写一个非常基本的 Markdown 到 HTML 转换器。

我设法编写了正则表达式来转换粗体和斜体文本,但我正在努力想出一个可以将 markdown link 转换为 link 标签的正则表达式html.

例如:

This is a [link](/url) 

应该变成

This is a <a href='/url'>link</a>

到目前为止,这是我的代码:

var bold = new Regex(@"(\*\*|__) (?=\S) (.+?[*_]*) (?<=\S) ", // Regex for bold text
        RegexOptions.IgnorePatternWhitespace | RegexOptions.Singleline | RegexOptions.Compiled);
var italic = new Regex(@"(\*|_) (?=\S) (.+?) (?<=\S) ", // Regex for italic text
        RegexOptions.IgnorePatternWhitespace | RegexOptions.Singleline | RegexOptions.Compiled);
var anchor = new Regex(@"??????????", // Regex for hyperlink text
        RegexOptions.Singleline | RegexOptions.IgnorePatternWhitespace | RegexOptions.Compiled);

content = bold.Replace(content, @"<b></b>");
content = italic.Replace(content, @"<i></i>");
content = anchor.Replace(content, @"<a href=''></a>");

什么样的正则表达式可以做到这一点?

尝试替换这个

\[(.+)\]\((\/.+)\)

有了这个:

<a href=''></a>

示例:https://regex101.com/r/ur35s8/2

在markdown中可能有两种方式url:

[sample link](http://example.com/)
[sample link](http://example.com/ "with title")

Addison 展示的解决方案中的正则表达式仅适用于第一种类型,并且仅适用于 url 以 / 开头的类型。例如 [link name]( "link to this question") 不会工作

这里的正则表达式在这两个地方都有效

\[([^]]*)\]\(([^\s^\)]*)[\s\)]

https://regex101.com/r/kZbw7g/1