如何检查对象是否是跨V8上下文的正则表达式?

时间:2013-04-01 14:35:07

标签: javascript regex node.js v8

我最近discovered当你在一个V8上下文中使用文字正则表达式语法时,即使你在上下文之间共享全局instanceof RegExp对象,RegExp也会返回false。

var Contextify = require('contextify');
var ctx = Contextify({ RegExp:RegExp, app: anExpressApp });

// When you create a new route, Express checks if the argument is an
// `instanceof RegExp`, and assumes it is a string if not.

ctx.run("
    app.get(new RegExp('...'), function() { ... }); // works because we share the `RegExp` global between contexts
    app.get(/.../, function() { ... }); // does not work
");

如何可靠地检查对象是否为RegExp交叉上下文?

2 个答案:

答案 0 :(得分:3)

看起来this suggestion为我们提供了最可靠的路线。

if (Object.prototype.toString.call(regExp) == '[object RegExp]') ...

这取决于specified behavior of toString,即返回对象的JavaScript内部[[Class]]属性(加"[object ""]")。

由于这是简单的字符串比较,因此它适用于上下文。

答案 1 :(得分:0)

我认为这将确认您有一个RegEx或假装成RegEx的东西。

json_decode()