@frankyboy73 sagte in Anfängerfrage: String zerlegen:
@asgothian Hi, habe mal noch ein bisschen rumgetestet.
so sieht der Code jetzt in der Funktion Node aus.
let arr = msg.payload.match(/(\d+),(\d+)/g);
var msg1 = {payload:parseInt(arr[0])};
var msg2 = {payload:parseInt(arr[1])};
return [msg1, msg2];
Also als Ausgabe bekomme ich dann bei msg1 die 86, aber bei msg2 NaN, also keinen Wert.
Man kann das natürlich auch mit einer function Node machen und das ist kürzer. Der Ansatz war prinzipiell richtig - nur wenn man den RegEx mit das gesamte Parameterpaar matchen lässt, dann matched es auch nur einmal und deshalb steht im arr[1] nichts drin.
So gehts:
Spoiler
[
{
"id": "48080aa4.4dcb84",
"type": "function",
"z": "dce8fa20.2e93c8",
"name": "",
"func": "let arr = msg.payload.match(/\\d+/g);\nvar msg1 = {payload:parseInt(arr[0])};\nvar msg2 = {payload:parseInt(arr[1])};\n \nreturn [msg1, msg2]; \n",
"outputs": 2,
"noerr": 0,
"initialize": "",
"finalize": "",
"x": 440,
"y": 2500,
"wires": [
[],
[]
]
}
]
oder hier der Code:
let arr = msg.payload.match(/\d+/g);
var msg1 = {payload:parseInt(arr[0])};
var msg2 = {payload:parseInt(arr[1])};
return [msg1, msg2];
c5b621b1-870f-4d8b-9e75-823b1485064b-image.png
Grundsätzlich kannst Du hier natürlich auch gleich ein Topic mitgeben.
let arr = msg.payload.match(/\d+/g);
var msg1 = {topic:'Parameter 1',payload:parseInt(arr[0])};
var msg2 = {topic:'Parameter 2',payload:parseInt(arr[1])};
return [msg1, msg2];
c9a6bb38-f1e7-4e8b-be9b-a140ddb18572-image.png
Du kannst die Nachrichten auch seriell ausgeben. Dann kann man auch mit dem Switch verzweigen und muss es nicht in der function Node machen. Dann einfach noch eine eckige Klammer um die return msg.
return [[msg1, msg2]];
Das Ergebnis ist dann das hier:
a44fa5e4-05f4-47ba-816d-d162be0b3a2d-image.png