diff --git a/lib/rules/no-useless-backreference.js b/lib/rules/no-useless-backreference.js index c99ac411495..7ca43c8b260 100644 --- a/lib/rules/no-useless-backreference.js +++ b/lib/rules/no-useless-backreference.js @@ -95,7 +95,7 @@ module.exports = { let regExpAST; try { - regExpAST = parser.parsePattern(pattern, 0, pattern.length, flags.includes("u")); + regExpAST = parser.parsePattern(pattern, 0, pattern.length, { unicode: flags.includes("u"), unicodeSets: flags.includes("v") }); } catch { // Ignore regular expressions with syntax errors diff --git a/tests/lib/rules/no-useless-backreference.js b/tests/lib/rules/no-useless-backreference.js index d51d5bf76e7..3db83c65a4e 100644 --- a/tests/lib/rules/no-useless-backreference.js +++ b/tests/lib/rules/no-useless-backreference.js @@ -142,7 +142,11 @@ ruleTester.run("no-useless-backreference", rule, { String.raw`new RegExp('\\1(a)\\2', 'ug')`, // \1 would be an error, but \2 is syntax error because of the 'u' flag String.raw`const flags = 'gus'; RegExp('\\1(a){', flags);`, // \1 would be an error, but the rule is aware of the 'u' flag so this is a syntax error String.raw`RegExp('\\1(a)\\k', 'u')`, // \1 would be an error, but \k produces syntax error because of the u flag - String.raw`new RegExp('\\k(?a)\\k')` // \k would be an error, but \k produces syntax error because group doesn't exist + String.raw`new RegExp('\\k(?a)\\k')`, // \k would be an error, but \k produces syntax error because group doesn't exist + + // ES2024 + String.raw`new RegExp('([[A--B]])\\1', 'v')`, + String.raw`new RegExp('[[]\\1](a)', 'v')` // SyntaxError ], invalid: [ @@ -508,6 +512,13 @@ ruleTester.run("no-useless-backreference", rule, { { code: String.raw`const r = RegExp, p = '\\1', s = '(a)'; new r(p + s);`, errors: [{ messageId: "forward", data: { bref: String.raw`\1`, group: String.raw`(a)` }, type: "NewExpression" }] + }, + + + // ES2024 + { + code: String.raw`new RegExp('\\1([[A--B]])', 'v')`, + errors: [{ messageId: "forward", data: { bref: String.raw`\1`, group: String.raw`([[A--B]])` }, type: "NewExpression" }] } ] });