var CachedRegexData = []; function regexDataFromRegex(aRegex) { var source = "", flags = ""; if (typeof aRegex == "string") { if (CachedRegexData[aRegex]) return CachedRegexData[aRegex]; string = aRegex; source = aRegex; } else { string = aRegex.toString(); if (CachedRegexData[string]) return CachedRegexData[string]; var index = string.lastIndexOf('/'); source = string.substr(0, index); flags = string.substr(index + 1); } source = source.replace("\\[\\^\\\\\\d\\]", ".", "g"); source = source.replace("\\[([^\\]]*)\\\\b([^\\]]*)\\]", "[$1\\\\cH$2]", "g") // [...\b...] -> [...\cH...] source = source.replace("(?