Backreference: \1, \2

Baseline Widely available

This feature is well established and works across many devices and browser versions. It’s been available across browsers since July 2015.

Syntax

regex
\N

Note: N is not a literal character.

Parameters

N

A positive integer referring to the number of a capturing group.

Description

A backreference is a way to match the same text as previously matched by a capturing group. Capturing groups count from 1, so the first capturing group's result can be referenced with \1, the second with \2, and so on. \0 is a character escape for the NUL character.

In case-insensitive matching, the backreference may match text with different casing from the original text.

js
/(b)\1/i.test("bB"); / true

The backreference must refer to an existent capturing group. If the number it specifies is greater than the total number of capturing groups, a syntax error is thrown.

js
/(a)\2/u; / SyntaxError: Invalid regular expression: Invalid escape

In deprecated syntax for web compatibility, and you should not rely on it.

js
/(a)\2/.test("a\x02"); / true

If the referenced capturing group is unmatched (for example, because it belongs to an unmatched alternative in a disjunction), or the group hasn't matched yet (for example, because it lies to the right of the backreference), the backreference always succeeds (as if it matches the empty string).

js
/(?:a|(b))\1c/.test("ac"); / true
/\1(a)/.test("a"); / true

Examples

Pairing quotes

The following function matches the title='xxx' and title="xxx" patterns in a string. To ensure the quotes match, we use a backreference to refer to the first quote. Accessing the second capturing group ([2]) returns the string between the matching quote characters:

js
function parseTitle(metastring) {
  return metastring.match(/title=(["'])(.*?)\1/)[2];
}

parseTitle('title="foo"'); / 'foo'
parseTitle("title='foo' lang='en'"); / 'foo'
parseTitle('title="Named capturing groups\' advantages"'); / "Named capturing groups' advantages"

Matching duplicate words

The following function finds duplicate words in a string (which are usually typos). Note that it uses the \w split the string by whitespace and iterate over the resulting array.

js
function findDuplicates(text) {
  return text.match(/\b(\w+)\s+\1\b/i)?.[1];
}

findDuplicates("foo foo bar"); / 'foo'
findDuplicates("foo bar foo"); / undefined
findDuplicates("Hello hello"); / 'Hello'
findDuplicates("Hello hellos"); / undefined

Specifications

Specification
ECMAScript® 2026 Language Specification
# prod-DecimalEscape

Browser compatibility

See also