【入門編】 RegExpオブジェクトの型判定 – JavaScript実践ガイド

こんにちは!フロントエンドの現場で長年コードと向き合っていると、ふとした瞬間に「あれ、このデータの正体って一体何者なんだっけ?」と迷子になることが誰にでもあります。

特に、JavaScriptの「型判定」は、初心者の方が最初に出会う大きな壁の一つ。今日はその中でも、ちょっと気難しい「正規表現(RegExp)」というオブジェクトの正体を、確実に見抜く方法を一緒に紐解いていきましょう。

大丈夫です、難しい専門用語はなるべく置いておいて、身近な例え話から入りますからね。

—

正規表現は「中身が見えないギフトボックス」

まず、正規表現(RegExp)を想像してみてください。コードの中で `/abc/` や `new RegExp(‘abc’)` と書くアレですね。

これ、「中身が見えないギフトボックス」のようなものだと思ってください。
「この箱の中に何が入っているかな?」と外から見たとき、JavaScriptの標準的な調べ方である `typeof` を使うと、とんでもない誤解が生じることがあるんです。

1. なぜ `typeof` ではダメなのか?

お買い物に行くと、商品の値札(型)を確認しますよね。JavaScriptには `typeof` という便利な「値札チェッカー」があります。でも、このチェッカー、実はちょっと大雑把なんです。

const myRegex = /hello/gi;

// さあ、typeofで調べてみましょう
console.log(typeof myRegex); // 結果は “object”

ほら、「object(オブジェクト)」としか答えてくれません。これでは、中身が「正規表現」なのか、それとも「配列(Array)」や「ただの辞書(Object)」なのか、全く区別がつかないんです。

例えるなら、お店の商品すべてに「雑貨」という値札しか貼られていない状態。これではレジで困ってしまいますよね。

—

正解は「身分証明書」を確認すること

では、どうすれば「あなたは正規表現ですね!」と確信を持って判定できるのでしょうか。
一番確実なのは、そのデータが「どの設計図(クラス)から生まれたか」という身分証明書(コンストラクタ)を確認することです。

`instanceof` を使ってみよう

「この箱は `RegExp` という設計図から作られましたか?」と直接問いかける方法です。これが実務で最もよく使われる、信頼性の高い判定手法です。

const myRegex = /hello/gi;

// “instanceof” は「~の親戚ですか?」と聞くようなもの
if (myRegex instanceof RegExp) {
console.log(“やった!正真正銘、正規表現オブジェクトです!”);
} else {
console.log(“残念、違いました。”);
}

これで、他のオブジェクトと混同することなく、自信を持って正規表現を扱うことができます。

—

【応用編】もっと厳密に調べたいとき

実は、たまに「別々のウィンドウやフレーム(iframe)をまたいだデータ」を判定するとき、`instanceof` がうまくいかないという、少し意地悪なケースがあります。

そんな時は、JavaScriptが本来持っている「戸籍」を覗き見ましょう。

const myRegex = /hello/gi;

// Object.prototype.toString.call を使うと、偽装不可能な正体が分かります
const type = Object.prototype.toString.call(myRegex);

console.log(type); // “[object RegExp]” と表示されます!

これは「戸籍謄本」を引っ張り出してくるようなイメージです。「このデータは、システム上どう定義されているか?」という最終的な答えを教えてくれます。どんな複雑な状況でも、これなら確実に判定できます。

—

まとめ:怖がらなくて大丈夫!

今日覚えて帰ってほしいのは、たったの2点だけです。

1. `typeof` は大雑把な道具: 正規表現を判定するには、ちょっと力不足。
2. `instanceof RegExp` で確認する: これが一番直感的で、現場でもよく使われる「正解」です。

プログラミングをしていると、「自分の書いたコードがちゃんと動いているか」不安になる夜もあるかもしれません。でも、一つひとつこうやってデータの正体を確認しながら進んでいけば、必ず道は開けます。

最初は誰でもつまずくポイントです。今日、この記事を読んでくださったあなたは、もう「正規表現の型判定」で迷うことはありません。自信を持って、次のコードを書いてみてくださいね!

また何か分からないことがあれば、いつでも聞きに来てください。あなたのエンジニアライフを応援しています!

コメント

タイトルとURLをコピーしました