Peyter

474
reputation
3
14
let
Match = (input, pattern, flags) => Json.Document(Web.Page("
    <script>
    var dq = String.fromCharCode(34);
    var input = '" & Text.Replace(Text.Replace(input, "\", "\\"), "'", "\'") & "';
    var pattern = '" & Text.Replace(Text.Replace(pattern, "\", "\\"), "'", "\'") & "';
    var flags = '" & Text.Replace(Text.Replace(flags, "\", "\\"), "'", "\'") & "';
    var re = new RegExp(pattern, flags);
    var match = re.exec(input);
    try {
        document.write(stringify(match))
    }
    catch (e) {
        document.write(e.message);
    }
    function stringify(value) {
        if (value === null) return 'null';
        if (typeof value === 'undefined') return 'undefined';
        if (typeof value === 'number') return value.toString();
        if (typeof value === 'boolean') return value.toString();
        if (typeof value === 'string') return dq + value.replace(new RegExp(dq, 'g'), '\\' + dq) + dq;
        var s = '';
        if (value instanceof Array) {
            for (var i = 0; i < value.length; i++) {
                if (s) s += ', ';
                s += stringify(value[i]);
            }
            return '[' + s + ']';
        }
        else {
            for (var p in value) {
                if (value.hasOwnProperty(p)) {
                    if (s) s += ', ';
                    s += stringify(p) + ': ' + stringify(value[p]);
                }
            }
            return '{' + s + '}';
        }
    }
    </script>
")[Data]{0}[Children]{0}[Children]{1}[Text]{0})

in Match