diff --git a/lib/rules/no-misleading-character-class.js b/lib/rules/no-misleading-character-class.js index 6d835816176..9315ba64972 100644 --- a/lib/rules/no-misleading-character-class.js +++ b/lib/rules/no-misleading-character-class.js @@ -130,12 +130,6 @@ module.exports = { * @returns {void} */ function verify(node, pattern, flags) { - const patternNode = parser.parsePattern( - pattern, - 0, - pattern.length, - flags.includes("u") - ); const has = { surrogatePairWithoutUFlag: false, combiningClass: false, @@ -144,6 +138,20 @@ module.exports = { regionalIndicatorSymbol: false, zwj: false }; + let patternNode; + + try { + patternNode = parser.parsePattern( + pattern, + 0, + pattern.length, + flags.includes("u") + ); + } catch (e) { + + // Ignore regular expressions with syntax errors + return; + } visitRegExpAST(patternNode, { onCharacterClassEnter(ccNode) { diff --git a/tests/lib/rules/no-misleading-character-class.js b/tests/lib/rules/no-misleading-character-class.js index 4eb104fc6a9..b4b3ac530a3 100644 --- a/tests/lib/rules/no-misleading-character-class.js +++ b/tests/lib/rules/no-misleading-character-class.js @@ -63,7 +63,11 @@ ruleTester.run("no-misleading-character-class", rule, { // Ignore solo ZWJ. "var r = /[\\u200D]/", - "var r = /[\\u200D]/u" + "var r = /[\\u200D]/u", + + // don't report and don't crash on invalid regex + "var r = new RegExp('[Á] [ ');", + "var r = RegExp('{ [Á]', 'u');" ], invalid: [