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