1

オープンソースの Markdown パーサーを作成しています。

私は正規表現の専門家ではないので、正規表現に少し問題があります。

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

ここで必要なのは、任意の 1 つまたは複数の文字の後に\n新しい行が続き、次の行が 1 つまたは複数=のみになるようにすることです。

入力は次のとおりです。

Hello World\n===

期待される出力:

こんにちは世界

私が取り組んだものですが、2つの新しい行があると、等号も取り除かれます。

だから私はこのようなものを持っている場合

Hello World\n\n===

私はこれを見なければならない

Hello World

===
4

3 に答える 3

1

ヘッダーを適切に一致させるには、文字列の開始アンカーも使用することをお勧めします。

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

^先頭と$行末を一致させるために使用し/mています。モディファイアと組み合わせて、件名全体ではなく行で動作します。

次に、\r?\n正確に 1 つの行末 (CRLF または LF) を変更します。最後に、={3,}は 3 つ以上の等号に一致します。

于 2013-07-18T02:45:05.287 に答える
1

エンド アンカー ( $) があります。これは、最初の等号の後に他の文字がない場合にのみ一致することを意味します。さらに、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 に答える