我正在制作一个开源的Markdown解析器。
我的正则表达式有点问题,因为我对正则表达式不是很专业。
r = r.replace(/(.*)(\n=$)/g, '<h1>$1</h1>');
我想要的是让\n
新行跟随任何一个或多个字符,下一行只能是=
中的一个或多个。
输入是:
Hello World\n===
预期产出:
我曾经工作的那个,但是当我有两条新线时,它也会剥掉等号。
所以,如果我有这样的东西
Hello World\n\n===
我应该看到这个
Hello World
===
答案 0 :(得分:1)
你有一个结束锚($
),这意味着它只匹配第一个等于之后没有其他字符。此外,看起来您希望能够匹配一个或多个等号。
我认为这就是你想要的:
"Hello World\n===".replace(/(.+)\n=+/g, '<h1>$1</h1>'); // <h1>Hello World</h1>
答案 1 :(得分:1)
尝试
(.+)\r\n=+
r = r.replace(/(.+)\r\n=+/g, '<h1>$1</h1>');
答案 2 :(得分:1)
为了正确匹配标题,我建议使用一个字符串起始锚,即:
s.replace(/^(.+)$\r?\n={3,}/gm, '<h1>$1</h1>')
我正在使用^
来匹配开头,$
匹配行结尾,并结合/m
修饰符,它们将在线上而不是整个主题上操作。
然后,\r?\n
将完全一行结束(CRLF或LF)。最后,={3,}
将匹配三个或更多等号。