2017-08-07 21 views
1

我正在使用Node-RED函數節點中的一些javascript,並且正在運行一個正則表達式比較問題。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現在的值爲「真」

當我試圖獲取「來電」變量從其他地方雖然不是定義它,它失敗。

//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; 

當設置變量「來襲」這種方式行不通並抱怨「類型錯誤:incoming.test不是一個函數」。獲取typeof(傳入)將像之前一樣返回「String」而不是「Object」。 msg.payload [0] .expression包含與設置在函數內部相同的字符串,它只是具有不同的數據類型。處理這個問題的最好方法是什麼?

謝謝!

+0

是msg.payload [0] .expression一個字符串? –

+1

可能的dup https://stackoverflow.com/questions/874709/converting-user-input-string-to-regular-expression –

+0

Garr - 你是對的,我在傳入的消息周圍添加了RegExp(),它現在正在正確轉換。謝謝! – Eric

回答

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!