改行で文字列を分割!JavaScriptとNode.jsのテクニック大公開
JavaScript と Node.js で文字列を改行 (\n
) で分割するには、主に以下の2つの方法があります。
- String.prototype.split() メソッドを使う
- 正規表現を使う
それぞれの特徴と使い方を以下で詳しく説明します。
説明:
String.prototype.split()
メソッドは、文字列を指定した区切り文字で分割し、配列として返します。改行 (\n
) を区切り文字として指定することで、文字列を改行ごとに分割することができます。
例:
const str = "Hello\nWorld\nGoodbye";
const lines = str.split("\n");
console.log(lines); // ["Hello", "World", "Goodbye"]
利点:
- シンプルで分かりやすい
- 改行以外の区切り文字も一緒に分割してしまう
- 空行は配列に含まれない
正規表現は、パターンに一致する文字列を検索・置換・抽出するための強力なツールです。改行 (\n
) を表す正規表現を使って、文字列を改行ごとに分割することができます。
const str = "Hello\nWorld\nGoodbye";
const lines = str.split(/\n/);
console.log(lines); // ["Hello", "World", "Goodbye"]
- 空行も配列に含めることができる
シンプルで分かりやすいコードを求める場合は、String.prototype.split()
メソッドを使うのがおすすめです。一方、改行以外の区切り文字も一緒に分割したい場合や、空行も配列に含めたい場合は、正規表現を使うのがおすすめです。
補足
- 上記の例では、
const
キーワードを使って変数を宣言していますが、これは JavaScript の最新機能です。古いバージョンの JavaScript を使用している場合は、var
キーワードを使って変数を宣言する必要があります。 - また、末尾に改行 (
\n
) が含まれている場合は、trim()
メソッドを使って削除することをおすすめします。
const str = "Hello\nWorld\nGoodbye\n";
const lines = str.trim().split(/\n/);
console.log(lines); // ["Hello", "World", "Goodbye"]
const str = "Hello\nWorld\nGoodbye";
// 改行ごとに文字列を分割して配列に格納
const lines = str.split("\n");
// 各行を出力
for (const line of lines) {
console.log(line);
}
このコードを実行すると、以下の出力が得られます。
Hello
World
Goodbye
const str = "Hello\nWorld\nGoodbye";
// 改行ごとに文字列を分割して配列に格納
const lines = str.split(/\n/);
// 各行を出力
for (const line of lines) {
console.log(line);
}
Hello
World
Goodbye
Node.js でファイルを読み込んで行ごとに処理する
const fs = require("fs");
// ファイルを読み込む
const file = fs.readFileSync("input.txt", "utf8");
// 改行ごとに文字列を分割して配列に格納
const lines = file.split("\n");
// 各行を出力
for (const line of lines) {
console.log(line);
}
このコードは、input.txt
という名前のファイルを読み込み、その内容を改行ごとに分割して配列に格納し、各行を出力します。
- 上記のコードでは、
fs
モジュールを使用してファイルを操作しています。 fs.readFileSync()
メソッドは、ファイルの内容を文字列として読み込みます。utf8
エンコーディングを指定することで、日本語を含むファイルを正しく読み込むことができます。- ファイルの内容を改行ごとに分割するには、
String.prototype.split()
メソッドまたは正規表現を使用します。 - 各行を出力するには、
for...of
ループを使用します。
- ファイルを読み込む代わりに、ユーザーからの入力を処理したい場合は、
readline
モジュールを使用することができます。 - 出力をファイルに書き込みたい場合は、
fs.writeFileSync()
メソッドを使用することができます。
JavaScript と Node.js で文字列を改行で分割するその他の方法
Array.from() メソッドと正規表現を使う
この方法は、Array.from()
メソッドと正規表現を組み合わせて、文字列を改行ごとに分割するものです。
const str = "Hello\nWorld\nGoodbye";
// 改行ごとに文字列を分割して配列に格納
const lines = Array.from(str.matchAll(/\n/g));
// 各行を出力
for (const line of lines) {
console.log(line[0]); // 改行文字を含まない部分のみを出力
}
Hello
World
Goodbye
- このコードでは、
str.matchAll(/\n/g)
を使って、文字列内のすべての改行 (\n
) に一致する部分を取得します。 g
フラグは、すべてのマッチング結果を取得することを意味します。Array.from()
メソッドを使って、マッチング結果を配列に変換します。- 各行を出力する際には、
line[0]
を使用して、改行文字を含まない部分のみを出力します。
ループと substring() メソッドを使う
この方法は、ループと substring()
メソッドを使用して、文字列を改行ごとに分割するものです。
const str = "Hello\nWorld\nGoodbye";
let i = 0;
let lines = [];
// 改行が見つかるまでループ
while ((i = str.indexOf("\n", i)) !== -1) {
const line = str.substring(0, i);
lines.push(line);
str = str.substring(i + 1);
}
// 最後の行を追加
lines.push(str);
// 各行を出力
for (const line of lines) {
console.log(line);
}
Hello
World
Goodbye
- このコードでは、
indexOf()
メソッドを使って、文字列内の次の改行 (\n
) の位置を探します。 - 改行が見つかるまでループし、その都度、
substring()
メソッドを使って、現在の改行までの部分文字列を切り取ります。 - 切り取られた部分文字列は、
lines
配列に格納されます。 - ループの終了後、
str
変数には最後の行のみが残っているため、それをlines
配列に追加します。
- 上記の方法は、比較的シンプルなコードで済むという利点があります。
- 一方、ループ処理が必要となるため、処理速度が遅くなる可能性があります。
上記以外にも、文字列を改行で分割する方法はいくつかあります。状況に応じて、最適な方法を選択してください。
javascript node.js