diff --git a/nodes/core/logic/15-change.html b/nodes/core/logic/15-change.html
index b1ad880d8..9d8ad6652 100644
--- a/nodes/core/logic/15-change.html
+++ b/nodes/core/logic/15-change.html
@@ -34,6 +34,11 @@
+
+
+
+
+
@@ -56,19 +61,9 @@
defaults: {
action: {value:"change",required:true},
property: {value:"payload"},
- from: {value:"",validate: function(v) {
- if (this.action == "change") {
- try {
- var re = new RegExp(this.from, "g");
- return true;
- } catch(err) {
- RED.notify("Error: "+err.message,"error");
- return false;
- }
- }
- return true;
- }},
+ from: {value:""},
to: {value:""},
+ reg: {value:false},
name: {value:""}
},
inputs: 1,
@@ -81,6 +76,7 @@
return this.name ? "node_label_italic" : "";
},
oneditprepare: function() {
+ if (this.reg === null) { $("#node-input-reg").prop('checked', true); }
$("#node-input-action").change( function() {
var a = $("#node-input-action").val();
if (a === "replace") {
@@ -89,6 +85,7 @@
$("#node-input-t").html("with value");
$("#node-from-row").hide();
$("#node-to-row").show();
+ $("#node-reg-row").hide();
$("#node-tip").html("Tip: expects a new property name and either a fixed value OR the full name of another msg.property eg: msg.sentiment.score");
}
if (a === "delete") {
@@ -97,6 +94,7 @@
//$("#node-input-t").html("to");
$("#node-from-row").hide();
$("#node-to-row").hide();
+ $("#node-reg-row").hide();
$("#node-tip").html("Tip: deletes the named property and all sub-properties");
}
if (a === "change") {
@@ -105,7 +103,8 @@
$("#node-input-t").html("replace with");
$("#node-from-row").show();
$("#node-to-row").show();
- $("#node-tip").html("Tip: if it contains can be a regex, likewise replace with can accept regex results. Only works on strings.");
+ $("#node-reg-row").show();
+ $("#node-tip").html("Tip: If contains is a regex, you must escape any special characters. Likewise replace with can accept regex results. Only works on strings.");
}
//if (a === "replace") {
// $("#node-input-todo").html("called");
diff --git a/nodes/core/logic/15-change.js b/nodes/core/logic/15-change.js
index 5f518987f..8922bde20 100644
--- a/nodes/core/logic/15-change.js
+++ b/nodes/core/logic/15-change.js
@@ -22,6 +22,7 @@ function ChangeNode(n) {
this.property = n.property || "";
this.from = n.from || " ";
this.to = n.to || " ";
+ this.reg = (n.reg === null || n.reg);
var node = this;
var makeNew = function( stem, path, value ) {
@@ -35,13 +36,17 @@ function ChangeNode(n) {
this.on('input', function (msg) {
if (node.action == "change") {
- try {
- node.re = new RegExp(this.from, "g");
- if (typeof msg[node.property] === "string") {
- msg[node.property] = (msg[node.property]).replace(node.re, node.to);
- }
- } catch(err) {
- this.error(err.message);
+ var from = node.from;
+ if (node.reg === false) {
+ from = from.replace(/[-[\]{}()*+?.,\\^$|#\s]/g, "\\$&");
+ }
+ try {
+ node.re = new RegExp(from, "g");
+ } catch (e) {
+ node.error("Invalid regex: "+from);
+ }
+ if (typeof msg[node.property] === "string") {
+ msg[node.property] = (msg[node.property]).replace(node.re, node.to);
}
}
//else if (node.action == "replace") {