JSFiddle - React, Tailwind, and code Playground

by Michael Russell

JavaScript

var ConvertToProgressivePresent1 = (function() {
    // cache this regex
    var rProgressivePresent = /\b(?:(submi(t))|(creat|sav|updat)e)\b/i;
    return function(phrase) {
        return phrase.replace(rProgressivePresent, "$1$2$3ing");
    };
}());

var ConvertToProgressivePresent2 = (function() {
    var replaceValues = {
        "Submit": "Submitting",
        "Create": "Creating",
        "Update": "Updating",
        "Save": "Saving"
    }
    return function(phrase) {
        var matched = false;
        for (var item in replaceValues) {
            phrase = phrase.replace(new RegExp(item, 'i'), function(match) {
                matched = true;
                return replaceValues[item].replace(replaceValues[item].charAt(0), match.charAt(0));
            });
            if (matched) break;
        }
        return phrase;
    };
}());


var funcs = {
    "ConvertToProgressivePresent1": ConvertToProgressivePresent1,
    "ConvertToProgressivePresent2": ConvertToProgressivePresent2
};

var tests = [
    ["Submit Report", "Submitting Report"],
    ["Create New", "Creating New"],
    ["Update", "Updating"],
    ["Save Item", "Saving Item"],
    ["Create New Update", "Creating New Update"],
    ["submit", "submitting"],
    ["Save Creation", "Saving Creation"],
    ["update", "updating"]
    ];

var errors = [],
    i = 0,
    test;
while (test = tests[i++]) {
    var original = test[0],
        answer = test[1];
    for (var name in funcs) {
        var attempt = funcs[name](original);
        if (attempt !== answer) {
            errors.push(name + " fails test: '" + original + "' with '" + attempt + "'");
        }
    }
}
alert(errors.join("\n") || "All tests passed");