Masz przykład
Function RegexReplace(ByVal match As Match)
Try
Select Case LCase(match.Groups(1).Value)
Case "img"
Return "<img src=""" & match.Groups(2).Value & """/>"
Case "b"
Return "<b>" & match.Groups(2).Value & "</b>"
Case "i"
Return "<i>" & match.Groups(2).Value & "</i>"
Case "color"
Return "<span style=""color: " & match.Groups(2).Value & ";"">" & match.Groups(3).Value & "</span>"
End Select
Catch ex As Exception
End Try
End Function
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
Const HTML_TEMPLATE As String = "<!DOCTYPE html><html><head><title>Podgląd</title>" & _
"<style>body {{background-color: #000000; color: #FFEBCD; " & _
"font-size: 12px; text-align: justify; font-family: arial, " & _
"verdana, sans-serif;}} img {{border: 1px solid #FFD700;}}></style>" & _
"</head><body>{0}</body></html>"
Dim BBCODE_PATTERNS() As String = {"\[(img)\](.+?)\[\/img\]", _
"\[(b)\](.+?)\[\/b\]", _
"\[(i)\](.+?)\[\/i\]", _
"\[(color)=([#0-9A-F]+?)\](.+?)\[\/color\]"}
Dim html As String = RichTextBox1.Text
Dim MatchEval As New MatchEvaluator(AddressOf RegexReplace)
For Each pattern As String In BBCODE_PATTERNS
html = Regex.Replace(html, pattern, MatchEval, RegexOptions.IgnoreCase or RegexOptions.Multiline)
Next
WebBrowser1.DocumentText = String.Format(HTML_TEMPLATE, html)
End Sub
EDIT albo wykorzystaj parser do którego link podał @dam1an