過去に何度も、段落を保存する必要があることを除いて、空白のすべての実行が単一のスペースに「折りたたまれる」ようにテキストのブロックをフォーマットする問題について疑問に思いました-つまり、空白行のすべての実行がに折りたたまれます単一の空白行ですが、スペースだけに折りたたまれていません。
空白行はもちろん、空白以外の文字が介在しない 2 つの行末文字 (通常はキャリッジ リターンまたはラインフィード、またはその両方) です。(スペースやタブなど、他の空白がある場合もあります)。
これは確かにかなり一般的な問題であり、解決するのは難しくありませんが、エレガンスに欠けていたり、抜け穴が開いたままになっている私のソリューションには常に不満があります。確かに、これを行うためのエレガントな表現方法があります。
少なくとも Perl、Vim、および JavaScript で実行したかったので、これをすべての正規表現フレーバーに対してオープンのままにします。これがnode.jsでそれを行うための私の最近の怠惰な試みです。抜け穴は明らかに魔法の言葉です。これはおそらく、私が使用した不十分なソリューションのかなり典型的なものです::
text = text.replace(/\r?\n(?:\s*\r?\n)+/g, '_SomeMagicWord_');
text = text.replace(/\s\s+/gm, ' ');
text = text.replace(/_SomeMagicWord_/g, '\r\n\r\n');
私の説明が明確でない場合は、次から変換する必要があります。
フー バー
バズ フレッド バーニー ウィルマ
ワン ツー スリー
これに:
フー バー バズ フレッド バーニー ウィルマ
ワン ツー スリー
(行末の末尾の空白にも注意してください!)