小编典典

正则表达式的类型

all

有没有办法检测一个 JavaScript 对象是否是一个正则表达式?

例如,我想做这样的事情:

var t = /^foo(bar)?$/i;
alert(typeof t); //I want this to return "regexp"

这可能吗?

谢谢!

编辑:感谢所有的答案。看来我有两个非常好的选择:

obj.constructor.name === "RegExp"

或者

obj instanceof RegExp

任何一种方法的主要优点/缺点?

再次感谢!


阅读 127

收藏
2022-08-17

共1个答案

小编典典

您可以使用 instanceof 运算符:

var t = /^foo(bar)?$/i;
alert(t instanceof RegExp);//returns true

实际上,这 几乎 与以下内容相同:

var t = /^foo(bar)?$/i;
alert(t.constructor == RegExp);//returns true

请记住,由于 RegExp 不是原始数据类型,因此无法使用typeof运算符,这可能是该问题的最佳选择

但是您可以使用上面的这个技巧或其他类似 鸭子类型 检查_的技巧,例如,检查此类对象是否具有任何重要的方法或属性,或者通过其 _内部类值 (通过 using
{}.toString.call(instaceOfMyObject))。

2022-08-17