diff --git a/src/js/config/Categories.js b/src/js/config/Categories.js index 6f779f0b..e99622f2 100755 --- a/src/js/config/Categories.js +++ b/src/js/config/Categories.js @@ -149,6 +149,7 @@ const Categories = [ "Sort", "Unique", "Split", + "Filter", "Count occurrences", "Expand alphabet range", "Parse escaped string", diff --git a/src/js/config/OperationConfig.js b/src/js/config/OperationConfig.js index 9a287f7a..6d8b932c 100755 --- a/src/js/config/OperationConfig.js +++ b/src/js/config/OperationConfig.js @@ -1764,6 +1764,29 @@ const OperationConfig = { } ] }, + "Filter": { + description: "Filter the string with an regular expression", + run: StrUtils.run_filter, + input_type: "string", + output_type: "string", + args: [ + { + name: "Delimiter", + type: "option", + value: StrUtils.DELIMITER_OPTIONS + }, + { + name: "Regex", + type: "string", + value: "" + }, + { + name: "Invert condition", + type: "boolean", + value: SeqUtils.SORT_REVERSE + }, + ] + }, "Strings": { description: "Extracts all strings from the input.", run: Extract.run_strings, diff --git a/src/js/operations/StrUtils.js b/src/js/operations/StrUtils.js index e0d10105..71d3436a 100755 --- a/src/js/operations/StrUtils.js +++ b/src/js/operations/StrUtils.js @@ -261,6 +261,32 @@ var StrUtils = { return sections.join(join_delim); }, + + /** + * Filter by regex operation. + * + * @author Mikescher (https://github.com/Mikescher | https://mikescher.com) + * + * @param {string} input + * @param {Object[]} args + * @returns {string} + */ + run_filter: function(input, args) { + var delim = Utils.char_rep[args[0]]; + var reverse = args[2]; + + try { + var regex = new RegExp(args[1]); + } catch (err) { + return "Invalid regex. Details: " + err.message; + } + + const regex_filter = function(value) { + return reverse ^ regex.test(value); + } + + return input.split(delim).filter(regex_filter).join(delim); + }, /**