Можно попробовать использовать конструктор.
Например,
var patt = new RegExp('hello');
if (patt.constructor === RegExp) {
// do stuff...
}
Можно использовать и для массивов (которые, как известно, в JS являются объектами и
typeof
этому подтверждение).
При этом массив можно объявлять не через
new
, а просто
[ ]
.
Ещё можно проверять через
patt instanceof RegExp
, но как показывает
jsperf этот способ меленее (даже
isArray()
медленнее для массивов), чем проверка конструктором.
Правда, с
null
и
undefined
это не сработает. В этом случае можно объединить и записать:
var patt = new RegExp('hello');
if (typeof patt === "undefined" || patt === null || patt.constructor === RegExp) {
// do stuff...
}