JavaScript オブジェクトが正規表現であるかどうかを検出する方法はありますか?
たとえば、次のようなことをしたいのです。
var t = /^foo(bar)?$/i;
alert(typeof t); //I want this to return "regexp"
これは可能ですか?
ありがとう!
編集: 全ての回答に感謝します。 2 つの非常に良い選択肢があるようです:
obj.constructor.name === "RegExp"
または
obj instanceof RegExp
どちらの方法にも大きな長所/短所はありますか?
再度、感謝します!
ベストアンサー1
使用できますインスタンスオペレーター:
var t = /^foo(bar)?$/i;
alert(t instanceof RegExp);//returns true
実際、それはほとんどと同じ:
var t = /^foo(bar)?$/i;
alert(t.constructor == RegExp);//returns true
覚えておいてほしいのは、正規表現ではないプリミティブデータ型、typeof
演算子を使用することはできません。最良の選択肢となるこの質問に対して。
しかし、上記のトリックや次のような他のトリックを使うこともできますアヒル型チェック中例えば、そのようなオブジェクトに重要なメソッドやプロパティがあるかどうかをチェックしたり、内部クラス値( を使用{}.toString.call(instaceOfMyObject)
)。