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
JavaScript
// 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;