const RE_REGEXP_CHAR = /[\\^$.*+?()[\]{}|]/gu const RE_HAS_REGEXP_CHAR = new RegExp(RE_REGEXP_CHAR.source) const RE_REGEXP_STR = /^\/(.+)\/(.*)$/u /** * Escapes the `RegExp` special characters "^", "$", "\", ".", "*", "+", * "?", "(", ")", "[", "]", "{", "}", and "|" in `string`. * * @param {string} string The string to escape. * @returns {string} Returns the escaped string. */ function escape(string) { return string && RE_HAS_REGEXP_CHAR.test(string) ? string.replace(RE_REGEXP_CHAR, '\\$&') : string } /** * Convert a string to the `RegExp`. * Normal strings (e.g. `"foo"`) is converted to `/^foo$/` of `RegExp`. * Strings like `"/^foo/i"` are converted to `/^foo/i` of `RegExp`. * * @param {string} string The string to convert. * @returns {RegExp} Returns the `RegExp`. */ function toRegExp(string) { const parts = RE_REGEXP_STR.exec(string) if (parts) { return new RegExp(parts[1], parts[2]) } return new RegExp(`^${escape(string)}$`) } /** * Checks whether given string is regexp string * @param {string} string * @returns {boolean} */ function isRegExp(string) { return Boolean(RE_REGEXP_STR.exec(string)) } module.exports = { escape, toRegExp, isRegExp }