diff --git a/lib/rules/no-useless-escape.js b/lib/rules/no-useless-escape.js
index 2046a148a17fd1d5f3a4bbc9f45f7700259d11fa..f4898c6b57355a4fd72c43a9f32bf1a36a6ccf4a 100644
--- a/lib/rules/no-useless-escape.js
+++ b/lib/rules/no-useless-escape.js
@@ -97,12 +97,30 @@ module.exports = {
             escapeBackslash: "Replace the `\\` with `\\\\` to include the actual backslash character."
         },
 
-        schema: []
+        schema: [{
+            type: "object",
+            properties: {
+                extra: {
+                    type: "string",
+                    default: ""
+                },
+                extraCharClass: {
+                    type: "string",
+                    default: ""
+                },
+            },
+            additionalProperties: false
+        }]
     },
 
     create(context) {
+        const options = context.options[0] || {};
+        const { extra, extraCharClass } = options || ''
         const sourceCode = context.getSourceCode();
 
+        const NON_CHARCLASS_ESCAPES = union(REGEX_NON_CHARCLASS_ESCAPES, new Set(extra))
+        const CHARCLASS_ESCAPES = union(REGEX_GENERAL_ESCAPES, new Set(extraCharClass))
+
         /**
          * Reports a node
          * @param {ASTNode} node The node to report
@@ -238,7 +256,7 @@ module.exports = {
                     .filter(charInfo => charInfo.escaped)
 
                     // Filter out characters that are valid to escape, based on their position in the regular expression.
-                    .filter(charInfo => !(charInfo.inCharClass ? REGEX_GENERAL_ESCAPES : REGEX_NON_CHARCLASS_ESCAPES).has(charInfo.text))
+                    .filter(charInfo => !(charInfo.inCharClass ? CHARCLASS_ESCAPES : NON_CHARCLASS_ESCAPES).has(charInfo.text))
 
                     // Report all the remaining characters.
                     .forEach(charInfo => report(node, charInfo.index, charInfo.text));