Elm.Native.Regex = {}; Elm.Native.Regex.make = function(elm) { elm.Native = elm.Native || {}; elm.Native.Regex = elm.Native.Regex || {}; if (elm.Native.Regex.values) return elm.Native.Regex.values; if ('values' in Elm.Native.Regex) return elm.Native.Regex.values = Elm.Native.Regex.values; var List = Elm.Native.List.make(elm); var Maybe = Elm.Maybe.make(elm); function escape(str) { return str.replace(/[-\/\\^$*+?.()|[\]{}]/g, '\\$&'); } function caseInsensitive(re) { return new RegExp(re.source, 'gi'); } function regex(raw) { return new RegExp(raw, 'g'); } function contains(re, string) { return string.match(re) !== null; } function find(n, re, str) { n = n.ctor === "All" ? Infinity : n._0; var out = []; var number = 0; var string = str; var result; while (number++ < n && (result = re.exec(string))) { var i = result.length - 1; var subs = new Array(i); while (i > 0) { var submatch = result[i]; subs[--i] = submatch === undefined ? Maybe.Nothing : Maybe.Just(submatch); } out.push({ _:{}, match: result[0], submatches: List.fromArray(subs), index: result.index, number: number }); } return List.fromArray(out); } function replace(n, re, replacer, string) { n = n.ctor === "All" ? Infinity : n._0; var count = 0; function jsReplacer(match) { if (count++ > n) return match; var i = arguments.length-3; var submatches = new Array(i); while (i > 0) { var submatch = arguments[i]; submatches[--i] = submatch === undefined ? Maybe.Nothing : Maybe.Just(submatch); } return replacer({ _:{}, match:match, submatches:List.fromArray(submatches), index:arguments[i-1], number:count }); } return string.replace(re, jsReplacer); } function split(n, re, str) { if (n === Infinity) { return List.fromArray(string.split(re)); } var string = str; var result; var out = []; var start = re.lastIndex; while (n--) { if (!(result = re.exec(string))) break; out.push(string.slice(start, result.index)); start = re.lastIndex; } out.push(string.slice(start)); return List.fromArray(out); } return Elm.Native.Regex.values = { regex: regex, caseInsensitive: caseInsensitive, escape: escape, contains: F2(contains), find: F3(find), replace: F4(replace), split: F3(split) }; };