diff --git a/packages/node_modules/@node-red/nodes/core/function/10-switch.html b/packages/node_modules/@node-red/nodes/core/function/10-switch.html index d83a8820a..434b50de5 100644 --- a/packages/node_modules/@node-red/nodes/core/function/10-switch.html +++ b/packages/node_modules/@node-red/nodes/core/function/10-switch.html @@ -119,7 +119,7 @@ function createValueField(row, defaultType){ return $('',{class:"node-input-rule-value",type:"text",style:"width: 100%;"}).appendTo(row) - .typedInput({default:defaultType||'str',types:['msg','flow','global','str','num','jsonata','env',previousValueType]}); + .typedInput({default:defaultType||'str',types:['msg','flow','global','str','num','jsonata','env','re',previousValueType]}); } function createNumValueField(row, defaultType){ @@ -230,7 +230,6 @@ oneditprepare: function() { var node = this; - $("#node-input-property").typedInput({default:this.propertyType||'msg',types:['msg','flow','global','jsonata','env']}); var outputCount = $("#node-input-outputs").val("{}"); @@ -276,7 +275,7 @@ }); var inputRows = $('
',{style:"flex-grow:1"}).appendTo(container); var row = $('
',{style:"display: flex;"}).appendTo(inputRows); - var row2 = $('
',{style:"display: flex; padding-top: 5px; padding-left: 175px;"}).appendTo(inputRows); + var row2 = $('
',{style:"display: flex; padding-top: 5px; padding-left: 155px;"}).appendTo(inputRows); var row3 = $('
',{style:"display: flex; padding-top: 5px; align-items: center"}).appendTo(inputRows); var row4 = $('
',{style:"visibility: hidden; height: 0px;"}).appendTo(inputRows); @@ -302,7 +301,6 @@ var rowInputCell = $('
',{style:"flex-grow:1; margin-left: 5px;"}).appendTo(row); - var valueField = null; var numValueField = null; var expValueField = null; @@ -362,6 +360,9 @@ if (type === "regex") { row2.show(); row3.hide(); + if ( valueField.typedInput('type') === "str") { + valueField.typedInput('type','re'); + } } else if ((type === "btwn") || (type === "index")) { row2.hide(); row3.show(); @@ -409,6 +410,9 @@ } else if (rule.t === "jsonata_exp") { expValueField = createExpValueField(rowInputCell,rule.vt||'jsonata'); expValueField.typedInput('value',rule.v); + } else if (rule.t === "regex") { + valueField = createValueField(rowInputCell,rule.vt||'re'); + valueField.typedInput('value',rule.v); } else if (typeof rule.v != "undefined") { valueField = createValueField(rowInputCell,rule.vt||'str'); valueField.typedInput('value',rule.v); diff --git a/packages/node_modules/@node-red/nodes/core/function/10-switch.js b/packages/node_modules/@node-red/nodes/core/function/10-switch.js index 9d68f6b0b..0e45f5f11 100644 --- a/packages/node_modules/@node-red/nodes/core/function/10-switch.js +++ b/packages/node_modules/@node-red/nodes/core/function/10-switch.js @@ -26,11 +26,11 @@ module.exports = function(RED) { 'gte': function(a, b) { return a >= b; }, 'btwn': function(a, b, c) { return (a >= b && a <= c) || (a <= b && a >= c); }, 'cont': function(a, b) { return (a + "").indexOf(b) != -1; }, - 'regex': function(a, b, c, d) { return (a + "").match(new RegExp(b,d?'i':'')); }, 'true': function(a) { return a === true; }, 'false': function(a) { return a === false; }, 'null': function(a) { return (typeof a == "undefined" || a === null); }, 'nnull': function(a) { return (typeof a != "undefined" && a !== null); }, + 'regex': function(a, b, c, d) { return (a + "").matchAll(new RegExp(b,d?'ig':'g')); }, 'empty': function(a) { if (typeof a === 'string' || Array.isArray(a) || Buffer.isBuffer(a)) { return a.length === 0; @@ -197,7 +197,22 @@ module.exports = function(RED) { state.elseflag = true; } try { - if (operators[rule.t](property,v1,v2,rule.case,msg.parts)) { + const r = operators[rule.t](property,v1,v2,rule.case,msg.parts) + if (r) { + if (rule.t === "regex") { + msg.matches = []; + for (const match of r) { + const le = match.length + const g = [] + for (let i = 1; i