'use strict'; var chars = {}, unesc, temp; function reverse(object, prepender) { return Object.keys(object).reduce(function(reversed, key) { var newKey = prepender ? prepender + key : key; // Optionally prepend a string to key. reversed[object[key]] = newKey; // Swap key and value. return reversed; // Return the result. }, {}); } /** * Regex for common characters */ chars.escapeRegex = { '?': /\?/g, '@': /\@/g, '!': /\!/g, '+': /\+/g, '*': /\*/g, '(': /\(/g, ')': /\)/g, '[': /\[/g, ']': /\]/g }; /** * Escape characters */ chars.ESC = { '?': '__UNESC_QMRK__', '@': '__UNESC_AMPE__', '!': '__UNESC_EXCL__', '+': '__UNESC_PLUS__', '*': '__UNESC_STAR__', ',': '__UNESC_COMMA__', '(': '__UNESC_LTPAREN__', ')': '__UNESC_RTPAREN__', '[': '__UNESC_LTBRACK__', ']': '__UNESC_RTBRACK__' }; /** * Unescape characters */ chars.UNESC = unesc || (unesc = reverse(chars.ESC, '\\')); chars.ESC_TEMP = { '?': '__TEMP_QMRK__', '@': '__TEMP_AMPE__', '!': '__TEMP_EXCL__', '*': '__TEMP_STAR__', '+': '__TEMP_PLUS__', ',': '__TEMP_COMMA__', '(': '__TEMP_LTPAREN__', ')': '__TEMP_RTPAREN__', '[': '__TEMP_LTBRACK__', ']': '__TEMP_RTBRACK__' }; chars.TEMP = temp || (temp = reverse(chars.ESC_TEMP)); module.exports = chars;