JavaScriptのreplaceで複数の改行を1つにまとめる7つの方法

JavaScriptのreplaceで複数の改行を1つにまとめるJS
この記事は約13分で読めます。

※本記事のコンテンツは、利用目的を問わずご活用いただけます。実務経験10000時間以上のエンジニアが監修しており、基礎知識があれば初心者にも理解していただけるように、常に解説内容のわかりやすさや記事の品質に注力しております。不具合・分かりにくい説明や不適切な表現、動かないコードなど気になることがございましたら、記事の品質向上の為にお問い合わせフォームにてご共有いただけますと幸いです。(理解できない部分などの個別相談も無償で承っております)
(送信された情報は、プライバシーポリシーのもと、厳正に取扱い、処分させていただきます。)


●JavaScriptでreplaceを使った改行の置換とは

JavaScriptを使ったプログラミングの中で、文字列操作は非常に重要な役割を果たしています。

特に、テキストデータを扱う際には、改行を適切に処理することが求められます。

そこで活躍するのが、JavaScriptのreplaceメソッドです。

replaceメソッドは、文字列内の特定のパターンを別の文字列に置換する機能を持っています。

この強力な機能を使うことで、複数の改行を1つにまとめたり、不要な改行を取り除いたりすることができます。

○replaceの基本的な使い方

replaceメソッドの基本的な使い方は、次のようになります。

文字列.replace(検索文字列, 置換文字列);

ここで、「検索文字列」には、置換したい文字列や正規表現を指定します。

「置換文字列」には、置換後の文字列を指定します。

例えば、次のようなコードを実行すると、文字列内の「JavaScript」が「JS」に置換されます。

const str = "I love JavaScript!";
const newStr = str.replace("JavaScript", "JS");
console.log(newStr);

実行結果

I love JS!

このように、replaceメソッドを使うことで、文字列内の特定の部分を簡単に置換することができます。

○正規表現を使った改行の置換

改行を置換する際には、正規表現を使うことで、より柔軟な処理が可能になります。

正規表現を使う場合、検索文字列の部分に正規表現オブジェクトを指定します。

□サンプルコード1:単純な改行の置換

まずは、単純に改行を空文字列に置換する例を見てみましょう。

const str = "Hello,\nWorld!";
const newStr = str.replace(/\n/, "");
console.log(newStr);

実行結果

Hello,World!

このコードでは、正規表現 /\n/ を使って改行を検索し、空文字列に置換しています。

これにより、改行が取り除かれ、文字列が1行になります。

□サンプルコード2:複数の改行を1つにまとめる

次に、複数の改行を1つの改行にまとめる例を見てみましょう。

const str = "Hello,\n\nWorld!\n\nHow are you?";
const newStr = str.replace(/\n+/g, "\n");
console.log(newStr);

実行結果

Hello,
World!
How are you?

このコードでは、正規表現 /\n+/g を使って、1つ以上の連続した改行を検索しています。そして、それらを1つの改行に置換しています。

正規表現の後ろにある g は、グローバルフラグと呼ばれ、文字列内のすべてのマッチを置換するために使用します。

●改行コードの違いに注意

JavaScriptでreplaceを使って改行を置換する際に、もう1つ重要なポイントがあります。

それは、改行コードの違いです。

プログラミングを学び始めたばかりの頃は、改行コードなんて1つしかないと思っていませんでしたか?

私もそうでした。しかし、実際には改行コードには複数の種類があり、それぞれ異なる環境で使用されているのです。

○改行コードとは

改行コードは、文字列内で改行を表すための特別な文字のことを指します。

主な改行コードには、次の3種類があります。

  • \n(LF): Unixやmacで使用される改行コード
  • \r(CR): Classic Macintoshで使用される改行コード
  • \r\n(CR+LF): Windowsで使用される改行コード

これらの改行コードは、テキストエディタやプログラミング言語によって扱いが異なります。

そのため、JavaScriptでreplaceを使って改行を置換する際には、改行コードの違いに注意が必要なのです。

○プラットフォームによる改行コードの違い

JavaScriptのコードを書く際、私たちは普段使い慣れたテキストエディタを使用しますよね。

しかし、そのテキストエディタが改行コードをどのように扱っているかによって、コードの動作に影響が出ることがあります。

例えば、Windowsで作成されたテキストファイルをUnix環境で読み込んだ場合、改行コードが\r\nではなく\nに変換されることがあります。

逆に、Unix環境で作成されたファイルをWindowsで読み込むと、改行が正しく認識されないことがあるのです。

こうした改行コードの違いは、JavaScriptのreplaceを使う際にも影響してきます。

異なる環境で作成されたテキストデータを扱う場合、想定していた通りに改行が置換されないことがあるのです。

□サンプルコード3:改行コードを統一する

そこで、replaceを使って改行コードを統一する方法を見てみましょう。

const str = "Hello,\r\nWorld!\r\nHow are you?";
const newStr = str.replace(/\r\n|\r|\n/g, "\n");
console.log(newStr);

実行結果

Hello,
World!
How are you?

このコードでは、正規表現 /\r\n|\r|\n/g を使って、\r\n、\r、\nのすべての改行コードを検索しています。

そして、それらを\nに統一しています。

こうすることで、異なる環境から来たテキストデータの改行コードを統一し、期待通りの動作を実現することができます。

●置換パターンを工夫する

JavaScriptのreplaceを使って改行を置換する際、置換パターンを工夫することで、より柔軟な文字列操作が可能になります。

ここでは、キャプチャグループと先読み・後読みアサーションという2つの手法を紹介します。

これらの手法を使いこなせるようになれば、文字列処理の幅がぐっと広がるはずです。

私も初めて知ったときは、「こんなことができるんだ!」と感動したものです。

皆さんも、ぜひ一緒に学んでいきましょう。

○キャプチャグループを使う

キャプチャグループを使うと、正規表現でマッチした部分文字列を置換文字列内で再利用することができます。

これにより、置換前の文字列の一部を置換後の文字列に残すことが可能になるのです。

□サンプルコード4:キャプチャグループで置換

では、実際にキャプチャグループを使ってみましょう。

const str = "Hello, World! Hello, JavaScript!";
const newStr = str.replace(/(Hello), (World|JavaScript)/g, "$2, $1");
console.log(newStr);

実行結果

World, Hello! JavaScript, Hello!

このコードでは、正規表現 /(Hello), (World|JavaScript)/g を使って、「Hello, World」または「Hello, JavaScript」にマッチする部分を検索しています。

そして、置換文字列 "$2, $1" の中で、キャプチャグループで捕捉された部分文字列を $1$2 で参照しています。

これにより、「World, Hello」や「JavaScript, Hello」のように、文字列の一部を入れ替えることができるのです。

キャプチャグループを使えば、置換前の文字列の一部を再利用しながら、柔軟な置換が可能になります。

文字列処理のテクニックの1つとして、ぜひ覚えておきたいですね。

○先読み・後読みアサーションを使う

先読みアサーションと後読みアサーションは、正規表現でマッチする位置を特定するための機能です。

先読みアサーションは、特定のパターンに続く文字列にマッチし、後読みアサーションは、特定のパターンに先行する文字列にマッチします。

これらのアサーションを使うことで、置換対象の文字列をより細かく指定することができるようになります。

□サンプルコード5:先読みアサーションで置換

先読みアサーションを使った置換の例を見てみましょう。

const str = "Hello, World! Hello, JavaScript!";
const newStr = str.replace(/Hello(?=, JavaScript)/g, "Hi");
console.log(newStr);

実行結果

Hello, World! Hi, JavaScript!

このコードでは、正規表現 /Hello(?=, JavaScript)/g を使って、「Hello」の後に「, JavaScript」が続く場合にのみマッチするようにしています。

そして、マッチした「Hello」を「Hi」に置換しています。

これにより、「Hello, JavaScript」の部分だけが「Hi, JavaScript」に置換されるのです。

●replaceを使う上でのよくあるエラーと対処法

JavaScriptのreplaceを使って文字列操作をしていると、時々思わぬエラーに遭遇することがありますよね。

私もプログラミングを学び始めたころ、replaceがうまく動かなくて頭を抱えたものです。

そこで今回は、replaceを使う上でよくあるエラーとその対処法を紹介します。

このエラーを理解して、適切に対処できるようになれば、文字列操作の問題にスムーズに対応できるはずです。

○文字列とオブジェクトの混同

replaceメソッドは文字列に対して使用するものですが、うっかりオブジェクトに対して使ってしまうことがあります。

例えば、次のようなコードを書いてしまうと、エラーが発生します。

const obj = { message: "Hello, World!" };
const newObj = obj.replace("World", "JavaScript");
console.log(newObj);

このコードでは、オブジェクト obj に対して replace メソッドを呼び出そうとしています。

しかし、replace メソッドは文字列のメソッドなので、オブジェクトに対して使用するとエラーになるのです。

このエラーを避けるためには、オブジェクトのプロパティから文字列を取り出してから、replace メソッドを使う必要があります。

const obj = { message: "Hello, World!" };
const newMessage = obj.message.replace("World", "JavaScript");
console.log(newMessage);

実行結果

Hello, JavaScript!

このように、obj.message でオブジェクトから文字列を取り出してから、replace メソッドを呼び出すことで、正しく文字列を置換することができます。

○グローバルフラグの付け忘れ

replaceメソッドは、デフォルトでは最初にマッチした部分だけを置換します。

文字列全体を置換したい場合は、正規表現の末尾にグローバルフラグ g をつける必要があります。

const str = "Hello, World! Hello, JavaScript!";
const newStr = str.replace("Hello", "Hi");
console.log(newStr);

実行結果

Hi, World! Hello, JavaScript!

このコードでは、最初の “Hello” だけが “Hi” に置換され、2つ目の “Hello” は置換されていません。

グローバルフラグを付けて、文字列全体を置換するには、次のようにします。

const str = "Hello, World! Hello, JavaScript!";
const newStr = str.replace(/Hello/g, "Hi");
console.log(newStr);

実行結果

Hi, World! Hi, JavaScript!

正規表現の末尾に g をつけることで、文字列内のすべての “Hello” が “Hi” に置換されるようになります。

○正規表現パターンのミス

正規表現を使ってreplaceを行う際、正規表現パターンにミスがあると思わぬ結果になることがあります。

例えば、次のようなコードを見てみましょう。

const str = "Hello, World!";
const newStr = str.replace(/h/g, "Hi");
console.log(newStr);

実行結果

Hello, World!

このコードでは、正規表現 /h/g を使って、小文字の “h” を “Hi” に置換しようとしています。

しかし、実際には置換されていません。

なぜなら、文字列 “Hello, World!” には小文字の “h” が含まれていないからです。

正規表現では、大文字と小文字が区別されます。

大文字と小文字を区別せずにマッチさせたい場合は、正規表現の末尾に i フラグをつける必要があります。

const str = "Hello, World!";
const newStr = str.replace(/h/gi, "Hi");
console.log(newStr);

実行結果

HiEllo, World!

/h/gi のように、グローバルフラグ g と大文字小文字を区別しないフラグ i を組み合わせることで、文字列内のすべての “h” と “H” が “Hi” に置換されるようになります。

●replaceと改行置換の応用例

JavaScriptのreplaceを使った改行置換は、単に改行を削除したり、まとめたりするだけではありません。

応用次第で、より高度な文字列操作が可能になります。

ここでは、replaceと改行置換の実用的な応用例を2つ紹介します。

これらの例を通じて、replaceの活用方法を学んでいきましょう。

○サンプルコード6:HTMLタグ内の改行を削除

HTMLのソースコードを扱う際、タグ内の改行が邪魔になることがあります。

そんなときは、replaceを使って改行を削除してしまいましょう。

const html = `
  <div>
    <p>Hello,</p>
    <p>World!</p>
  </div>
`;
const newHtml = html.replace(/>\s+</g, "><");
console.log(newHtml);

実行結果

<div><p>Hello,</p><p>World!</p></div>

このコードでは、正規表現 />\s+</g を使って、>< の間にある空白文字(改行やスペースなど)を検索しています。

そして、それらを空文字列に置換することで、タグ内の改行を削除しています。

HTMLソースコードのサイズを小さくしたい場合や、HTMLの構造を整理したい場合に、この方法が役立つでしょう。

○サンプルコード7:テキストを整形して出力

改行を含むテキストデータを整形して出力したいことがあります。

その際、replaceを使えば、テキストを好みの形式に整えることができます。

const text = `
  JavaScript    プログラミング言語
  HTML   マークアップ言語
  CSS    スタイルシート言語
`;
const newText = text.replace(/\s+/g, " ").trim();
const lines = newText.split(" ");
const formattedText = lines.map(line => line.split(" ").join(": ")).join("\n");
console.log(formattedText);

実行結果

JavaScript: プログラミング言語
HTML: マークアップ言語
CSS: スタイルシート言語

このコードでは、まず正規表現 /\s+/g を使って、連続する空白文字を1つのスペースに置換しています。

そして、trim() メソッドで前後の空白を削除しています。

次に、split() メソッドでスペースを区切り文字として文字列を配列に分割し、map() メソッドで各要素をコロン(:)で結合しています。

最後に、join() メソッドで配列を改行で結合して、整形されたテキストを得ています。

まとめ

JavaScriptのreplaceメソッドは、複数の改行を1つにまとめたり、改行コードを統一したりする際に大活躍します。

正規表現と組み合わせることで、より柔軟な置換が可能になります。

エラーへの対処法を押さえ、応用例を参考にしながら、皆さんもreplaceを使いこなしていきましょう。