1

我正在制作一个开源 Markdown 解析器。

我的正则表达式有点问题,因为我不是正则表达式的专家。

r = r.replace(/(.*)(\n=$)/g, '<h1>$1</h1>');

我在这里想要的是让任何一个或多个字符跟随\n新行,下一行将是一个或多个=

输入是:

Hello World\n===

预期输出:

你好世界

我工作过的那个,但是当我有两条新线时,它也会去掉等号。

所以如果我有这样的事情

Hello World\n\n===

我应该看到这个

Hello World

===
4

3 回答 3

1

你有一个结束锚($),这意味着它只会匹配第一个等号之后没有其他字符。此外,您似乎希望能够匹配一个或多个等号。

我认为这就是你想要的:

"Hello World\n===".replace(/(.+)\n=+/g, '<h1>$1</h1>'); // <h1>Hello World</h1>
于 2013-07-18T02:24:48.220 回答
1

尝试

(.+)\r\n=+

r = r.replace(/(.+)\r\n=+/g, '<h1>$1</h1>');
于 2013-07-18T02:26:35.087 回答
1

为了正确匹配标题,我建议也使用字符串开头的锚点,即:

s.replace(/^(.+)$\r?\n={3,}/gm, '<h1>$1</h1>')

^用来匹配开始和$匹配行结尾,结合/m修饰符它们将在行而不是整个主题上操作。

然后,\r?\n将精确地调整一行结尾(CRLF 或 LF)。最后={3,}将匹配三个或更多等号。

于 2013-07-18T02:45:05.287 回答