【JavaScript】除外ワード配列を使って文中の特定の単語をすべて置換・削除する方法
はじめに
本記事では、文字列と文字列の配列を受け取るJavaScript関数の実装方法について解説します。この種の処理は、テキストのクリーニングやフィルタリングなど、実際のWeb開発でもよく使われるテクニックです。
要件の確認
今回作成する関数には、以下の要件があります。
- 引数として、対象となる文字列と、除外したい単語の配列を受け取る。
- 元の文字列の中に含まれる単語のうち、配列内に存在するすべての出現箇所を空白文字に置き換えた新しい文字列を返す。
- 処理には
String.prototype.replace()メソッドを使用する。
コード例
実際のコードは以下の通りです −
var excludeWords = ["A", "ABOUT", "ABOVE", "ACROSS", "ALL", "ALONG", "AM",
"AN", "AND", "ANY", "ASK", "AT", "AWAY", "CAN", "DID", "DIDN'T", "DO",
"DON'T", "FOR", "FROM", "HAD", "HAS", "HER", "HIS", "IN", "INTO", "IS",
"IT", "NONE", "NOT", "OF", "ON", "One", "OUT", "SO", "SOME", "THAT",
"THE", "THEIR", "THERE", "THEY", "THESE", "THIS", "TO", "TWIT", "WAS",
"WERE", "WEREN'T", "WHICH", "WILL", "WITH", "WHAT", "WHEN", "WHY"];
var sentence = "The first solution does not work for any UTF-8 alphaben. I
have managed to create function which do not use RegExp and use good UTF-8
support in JavaScript engine. The idea is simple if symbol is equal in
uppercase and lowercase it is special character. The only exception is
made for whitespace.";
const removeExcludedWords = (str, words) => {
let result = '';
const regex = new RegExp(`\\b(${words.join('|')})\\b`, 'gi');
result = str.replace(regex, "");
return result;
};
console.log(removeExcludedWords(sentence, excludeWords));
出力結果
コンソールに出力される結果は以下の通りです −
first solution does work UTF-8 alphaben. I have managed create function use RegExp use good UTF-8 support JavaScript engine. idea simple if symbol equal uppercase lowercase special character. only exception made whitespace.
コードの解説
この実装のポイントは以下の3点です。
1. 正規表現の動的生成
new RegExp() を使用し、除外ワードの配列を |(OR条件)で結合してパターンを組み立てています。これにより、配列の中身が変わっても柔軟に対応できます。
2. 単語境界 \b の活用
パターンの前後を \b で囲むことで、「完全に一致する単語」だけをマッチさせています。これがないと、たとえば「THE」というワードが「OTHER」のような別の単語の一部まで誤って置換されてしまう恐れがあります。
3. 'gi' フラグによる大文字小文字の無視
g フラグは文字列全体を対象としたグローバルな検索・置換を、i フラグは大文字小文字を区別しないマッチングを意味します。そのため、「the」「The」「THE」など、どの表記でも同じように除去されます。
まとめ
このように、String.prototype.replace() と動的に生成した正規表現を組み合わせることで、除外リストに基づいた単語の一括除去をシンプルかつ効率的に実現できます。ストップワードの除去など、自然言語処理の前処理にも応用できるテクニックですので、ぜひ活用してみてください。
-
JavaScriptの配列findIndex()関数の使い方をわかりやすく解説
JavaScriptのfindIndex()関数は、配列の中から指定した条件を満たす最初の要素を見つけ、そのインデックス番号を返すメソッドです。条件に合う要素が見つかった場合、その要素のインデックスが返されます。もし条件を満たす要素がひとつも存在しない場合は、-1が返されるという特徴があります。findIndex()の基本的な使い方以下は、findIndex()関数を使ったサンプルコードです。ボタンをクリックすると、配列内の「lion」という要素のインデックスを取得して表示します。サンプルコード<!DOCTYPE html> <html lang="ja"
-
JavaScriptの配列some()メソッドの使い方をわかりやすく解説
JavaScriptのArray.some()メソッドは、配列の要素の中に、指定されたテスト(条件)を満たすものが「1つでも存在するかどうか」を判定するためのメソッドです。ここでいうテストとは、配列の各要素に対して順番に実行されるコールバック関数のことを指します。コールバック関数が1つでもtrueを返した時点でsome()はtrueを返し、すべての要素が条件を満たさなかった場合はfalseを返します。なお、空の配列に対して呼び出した場合は常にfalseを返すという仕様になっている点にも注意しましょう。some()メソッドのサンプルコード以下は、配列のsome()メソッドを使った具体的な実装例で