JavaScriptのcompile()メソッドとは?使い方と非推奨の理由を解説
compile() メソッドは、JavaScriptにおいてスクリプトの実行中に正規表現オブジェクトをコンパイルし直すために使用されてきたメソッドです。一度作成した RegExp オブジェクトのパターンやフラグを後から変更し、同じオブジェクトを再利用できる点が特徴でした。
ただし、このメソッドはJavaScript 1.5 以降で非推奨(deprecated)となっており、現在の標準仕様(ECMAScript)からも削除されています。新しくコードを書く際は、new RegExp() コンストラクタを使って正規表現を生成し直す方法が推奨されます。
基本構文
regexObj.compile(pattern[, flags])
- pattern:コンパイルし直す正規表現のパターン
- flags:省略可能。「g」(グローバルマッチ)、「i」(大文字小文字の区別なし)などのフラグを指定
サンプルコード
以下は、compile() メソッドを使って既存の正規表現を再コンパイルし、置換結果を変化させる例です。
<!DOCTYPE html>
<html>
<head>
<style>
body {
font-family: "Segoe UI", Tahoma, Geneva, Verdana, sans-serif;
}
</style>
</head>
<body>
<h1>compile() Method</h1>
<p class="sample">
That man won the race and the woman over there came second
</p>
<h3>After compile()</h3>
<p class="result"></p>
<button class="Btn">Click Here</button>
<h3>Click the above button to use compile the regex to make changes</h3>
<script>
let sampleEle = document.querySelector(".sample");
let result = document.querySelector(".result");
document.querySelector(".Btn").addEventListener("click", () => {
var str = sampleEle.innerHTML;
var pattern = /man/g;
var str2 = str.replace(pattern, "person");
result.innerHTML = str2 + "<br>";
pattern = /(wo)?man/g;
pattern.compile(pattern);
str2 = str.replace(pattern, "person");
result.innerHTML += str2;
});
</script>
</body>
</html>
出力結果
ページを開いた直後の表示:

「Click Here」ボタンをクリックした後の表示:

動作のポイント
- 最初は
/man/gというパターンで置換するため、「woman」という単語の中にある「man」の部分のみが「person」に置き換えられます。 - その後、パターンを
/(wo)?man/gに変更して compile() メソッドで再コンパイルすると、「man」および「woman」の両方が完全な単語として「person」に置き換わります。
非推奨の理由と代替手段
compile() メソッドは主要ブラウザでのサポートが終了しており、実行環境によってはエラーや意図しない動作を引き起こす可能性があります。同様の処理を行いたい場合は、新しい RegExp オブジェクトを作り直すのが安全です。
// compile() の代わりに新しいRegExpオブジェクトを生成
let pattern = new RegExp("(wo)?man", "g");
let str2 = str.replace(pattern, "person");
このように new RegExp() を使えば、正規表現のパターンを実行時に動的に変更できるため、compile() メソッドを使う必要はありません。レガシーコードを保守する場合を除き、今後の開発では使用しないことをおすすめします。
-
JavaScriptのObject.fromEntries()メソッドとは?配列やMapをオブジェクトに変換する方法
JavaScriptのObject.fromEntries()メソッドは、「キー」と「値」のペアを持つ配列やMapなどのイテラブル(反復可能なオブジェクト)を、ひとつのオブジェクトに変換するためのメソッドです。 ES2019で追加されたこのメソッドは、オブジェクトを [key, value] 形式の配列に変換する Object.entries() と対になる存在であり、両者を組み合わせることで、オブジェクトのフィルタリングやデータ形式の変換を簡潔に記述できます。 基本構文 Object.fromEntries(iterable) 引数には、[キー, 値] のペアを要素として持つ配列やMapな
-
JavaScriptのArray.flatMap()メソッドでネストした配列をフラット化する方法
JavaScriptのArray.flatMap()メソッドは、ネスト(入れ子)された配列に対して各要素に関数を適用した結果を、新しいフラット(平坦化)な配列として返します。map()による変換と、深さ1の配列の平滑化を一度に行える便利なメソッドです。 以下は、Array.flatMap()メソッドの動作を確認できるサンプルコードです。 サンプルコード <!DOCTYPE html> <html lang="ja"> <head> <meta charset="UTF-8" /> <meta name