UNPKG

solutaaliquid

Version:

common utils for javascript. Utils to get the global scope (browser, webworker & co.). Customizable string escaper. Utilitize for objects. Extension at base javascript api (usefull extention like String.hashcode()).

64 lines (54 loc) 1.72 kB
// required to build the internal escape filter for regex const REGEXCHARMAP = ["\\","?","[", "]", "{", "}", "(", ")", ".", "^", "$"] .map(char => { return {f: new RegExp("\\" +char, "g"), v : "\\" + char}; }); const mapping = (aText, theFilters) => { let text = aText; theFilters.forEach(item => { text = text.replace(item.f, item.v); }); return text; }; const buildUnescapeList = (aCharMap, isCaseSensitiv) => { const option = isCaseSensitiv ? "mg" : "mgi"; return aCharMap.map(item => { if(!item.at || item.at == "unescape") return {f: new RegExp(mapping(item.escaped, REGEXCHARMAP), option), v: item.char} }).filter(item => !!item); }; const buildEscapeList = (aCharMap, isCaseSensitiv) => { const option = isCaseSensitiv ? "mg" : "mgi"; return aCharMap.map(item => { if(!item.at || item.at == "escape") return {f: new RegExp(mapping(item.char,REGEXCHARMAP), option), v: item.escaped} }).filter(item => !!item); }; class Escaper { constructor(escapeMap, isCaseSensitiv){ this.escapeMap = buildEscapeList(escapeMap, isCaseSensitiv) this.unescapeMap = buildUnescapeList(escapeMap, isCaseSensitiv) } escape(aText){ return mapping(aText, this.escapeMap); } unescape(aText){ return mapping(aText, this.unescapeMap); } static REGEXP_ESCAPER(){ return new Escaper([ {char: "\\", escaped : "\\\\"}, {char: "?", escaped : "\\?"}, {char: "[", escaped : "\\["}, {char: "]", escaped : "\\]"}, {char: "{", escaped : "\\{"}, {char: "}", escaped : "\\}"}, {char: "(", escaped : "\\("}, {char: ")", escaped : "\\)"}, {char: ".", escaped : "\\."}, {char: "^", escaped : "\\^"}, {char: "$", escaped : "\\$"} ]); } } export default Escaper;