JavaScriptで文字列の配列からコメントを削除する方法
この記事では、JavaScriptを使って文字列の配列からコメント部分を削除する方法について解説します。
問題
文字列の配列 arr を第一引数として、特殊文字の配列 starters を第二引数として受け取るJavaScript関数を作成する必要があります。
starters 配列には、コメントの開始となり得る文字が格納されています。作成する関数は、配列 arr を走査し、各文字列に含まれるコメントをすべて削除した結果を返すものとします。
例えば、関数への入力が次のような場合を考えてみましょう。
const arr = [ 'red, green !blue', 'jasmine, #pink, cyan' ]; const starters = ['!', '#'];
この場合、期待される出力は次のようになります。
const output = [ 'red, green', 'jasmine,' ];
「!」以降と「#」以降がコメントとして扱われ、それぞれの文字列から取り除かれているのがわかります。
アプローチ
この問題は、各文字列を1文字ずつ順番に確認しながら処理するシンプルな手法で解決できます。基本的な考え方は以下の通りです。
- コメント開始文字が現れるまでは、通常どおり文字を読み取って結果に追加する。
- コメント開始文字が見つかったら、フラグを切り替えて以降の文字を無視する。同時に、コメント直前の余分な空白も削除する。
- 改行文字「
\n」が現れたら、コメント状態を解除し、再び文字を読み取るモードに戻す。
コード例
上記のアプローチを実装したコードがこちらです。
const arr = [
'red, green !blue',
'jasmine, #pink, cyan'
];
const starters = ['!', '#'];
const removeComments = (arr = [], starters = []) => {
const res = [];
for (let i = 0; i < arr.length; i++) {
let str = '';
let flag = true;
for (let x of arr[i]) {
if (starters.includes(x)) {
// コメント開始文字を検出 → コメントモードへ移行
flag = false;
// コメント直前の余分な空白を削除
str = str.replace(/\s+$/, '');
} else if (x === '\n') {
// 改行でコメントを終了
flag = true;
}
if (flag) str += x;
}
res.push(str);
}
return res;
};
console.log(removeComments(arr, starters));
コードの解説
処理の流れをもう少し詳しく見ていきましょう。
- 外側のループ: 配列
arrの各文字列を1つずつ処理します。 - 内側のループ:
for...of構文で文字列を1文字ずつ走査します。 - コメント検出時: 現在の文字が
startersに含まれていれば、flagをfalseにしてコメントモードに移行します。このとき正規表現/\s+$/を使って、コメント開始前の不要な末尾空白を取り除いています。 - 改行の検出: 改行文字を見つけると
flagをtrueに戻し、次の行では再び通常の文字を読み取れるようにします。 - 結果の構築:
flagがtrueの間だけ文字をstrに連結し、各行の処理が終わったら結果配列resに追加します。
出力
このコードを実行すると、コンソールには次のように出力されます。
[ 'red, green', 'jasmine,' ]
このように、指定した開始文字以降のコメント部分がきれいに除去された文字列の配列が得られます。設定ファイルや簡易テキスト形式のパースなど、独自のコメント記法を持つデータを扱う際に役立つテクニックなので、ぜひ覚えておきましょう。
-
JavaScriptで配列から要素を削除する方法|pop・shift・spliceの使い方
JavaScriptで配列から要素を削除する場面は大きく分けて3つあります。まず配列の末尾から要素を削除する方法、次に配列の先頭から要素を削除する方法、そして指定したインデックス(位置)から要素を削除する方法です。 それぞれのケースに対応した標準組み込みメソッドが用意されているため、目的に応じて使い分けることができます。ここでは、実際のコード例とともに各メソッドの使い方を順番に見ていきましょう。 配列の末尾から要素を削除する(pop) 配列の末尾から要素を削除するには、popメソッドを使用します。popは配列の最後の要素を取り除き、取り除かれた要素を戻り値として返します。 let veggi
-
JavaScriptの配列を文字列に変換する方法【toString()の使い方を解説】
JavaScriptで配列の要素をひとつの文字列として扱いたい場面はよくあります。そんなときに便利なのがtoString()メソッドです。このメソッドを使うと、配列の各要素がカンマ(,)で区切られたひとつの文字列に変換されます。以下は、ボタンをクリックすると配列の中身が文字列として画面に表示されるシンプルなサンプルコードです。サンプルコード<!DOCTYPE html> <html lang=ja> <head> <meta charset=UTF-8 /> <meta name=viewport content=width=device-