最近在用js解析markdown
headline的正则如何写?
多个#
,最后一个要作为标题,比如##
,那么第一个#
作为<h1>
来解释,第二个#
作为标题来解释,最后解析得到:<h1>#</h1>
。
一般情况是## title
,井号和标题之间会有若干个空格。但标题自身里面的空格则要显示出来。
var headline = /^(\#{1,6})([^\#\n]+)$/m
var str = "## a##"
while ((stra = headline.exec(str)) !== null) {
count = stra[1].length;
str = str.replace(stra[0], '<h' + count + '>' + stra[2].trim() + '</h' + count + '>').trim();
}
比如:
var headline = /^(\#{1,6})(.*?)$/g
var str = "##a##"
while ((stra = headline.exec(str)) !== null) {
console.log(stra)
count = stra[1].length;
str = str.replace(stra[0], '<h' + count + '>' + stra[2].trim() + '</h' + count + '>').trim();
}
能解决以#结尾的问题,但不能解决全是#的情况
使用typora的时候我发现,typora并不能解析以#结尾的标题,但可以解决全是#的情况,最后一个#号会当做标题。
其实最好的写法应该是多个#号之后写个空格,然后写标题,而标题的内容应该可以是任意的(无论是否包含#号,或是以#号结尾),所以var headline = /^(\#{1,6})(.*?)$/g
应该是理想的答案,可以处理## #
的问题就行了。