2017-08-07 9 views
1

私はNode-RED関数ノードのJavaScriptを使っていますが、正規表現の比較で問題が発生しています。正常に動作してmsg.payloadは今、「真」の値を持つ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; 

私は他の場所ではなく、しかしそれを定義から「入ってくる」変数を取得しようとし

、それが失敗します。

//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(incoming)を取得すると、以前のように「Object」ではなく「String」が返されます。 msg.payload [0] .expressionには、関数内での設定と同じ文字列が含まれています。異なるデータ型を持っています。これを処理する最善の方法は何ですか?

ありがとうございます!

+0

はmsg.payload [0]です。表現は文字列ですか? –

+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にありがとうございます!

関連する問題