Javascript Object vs. String和test()方法

时间:2017-08-07 02:05:03

标签: javascript node-red

我正在研究Node-RED功能节点中的一些javascript,并且正在遇到正则表达式比较的问题。

var incoming = /^(?=.*?\bhello?\b)(?=.*?\bworld\b).*$/;
//var incoming = msg.payload[0].expression;
var sentence = "say hello to the world";
msg.payload = incoming.test(sentence);
return msg;

工作正常,msg.payload现在有值" true"

当我尝试获取"传入"来自其他地方的变量而不是定义它,它失败了。

//var incoming = /^(?=.*?\bhello?\b)(?=.*?\bworld\b).*$/;
var incoming = msg.payload[0].expression;
var sentence = "say hello to the world";
msg.payload = incoming.test(sentence);
return msg;

设置变量"传入"这种方式不起作用并且抱怨" TypeError:incoming.test不是函数"。获取typeof(传入)返回" String"而不是"对象"就像以前一样。 msg.payload [0] .expression包含与在函数内部设置相同的字符串,它只是具有不同的数据类型。处理这个问题的最佳方法是什么?

谢谢!

1 个答案:

答案 0 :(得分:1)

//var incoming = /^(?=.*?\bhello?\b)(?=.*?\bworld\b).*$/;
var incoming = RegExp(msg.payload[0].expression);
var sentence = "say hello to the world";
msg.payload = incoming.test(sentence);
return msg;

按预期工作,谢谢Garr!