我是GO的新手,我有点困惑。我不知道我做错了什么。
我想将markdown转换为html,所以我需要找到以space和#开头的每一行,并用h1标签替换。
如果我测试多行它不起作用,但当我只测试一行时,它正在工作。
示例:
//this works
testtext := "#Some text"
expectedResult := "<h1>Some text</h1>"
//this fails
testtext :=`#test
##test2
####test4
###test3`
expectedResult := `<h1>test</h1>
##test
####test
###test`
//test
func TestReplaceHedding1(t *testing.T) {
text := `#test
##test2
####test4
###test3`
replaceHedding1(&text)
if text != "<h1>test</h1>##test\n####test\n###test" {
t.Errorf("expected <h1>test</h1>, got", text)
}
}
func replaceHedding1(Text *string) {
reg := regexp.MustCompile(`^\s*#{1}(.*?)$`)
*Text = reg.ReplaceAllString(*Text, "<h1>$1</h1>")
}
答案 0 :(得分:4)
好吧,你的正则表达式应该更像这样:
(?m)^\s*#([^#].*?)$
(?m)
使^
和$
分别匹配每行的开头和结尾,因为否则,它们会匹配字符串的开头和结尾(我也删除了{1}
因为它是多余的。)
然后我在捕获组中添加了[^#]
,以确保第一个#
之后的下一个字符不是另一个#
。
我还更改了测试字符串,并使用了双引号和\n
,因为当您使用反引号时,#
之前的空格将成为字面值,而if
将随后失败。这是playground for go where I have tested the code。