Backreferences dans JScript

Les références arrière permettent de rechercher des groupes extensibles de caractères. Ils permettent également de reformater une chaîne d'entrée en réorganisant l'ordre et l'emplacement de ses éléments.

Vous pouvez faire référence à une sous-expression à partir d'une expression régulière et à partir d'une chaîne de remplacement. Chaque sous-expression est identifiée par un numéro et est désignée par « référence arrière ».

Dans une expression régulière, les parenthèses permettent de créer une sous-expression. La sous-correspondance résultante peut être récupérée par le programme. Pour plus d'informations, consultez Alternative et sous-expressions.

Utilisation de références arrière

Vous pouvez faire référence à une sous-expression à partir d'une expression régulière.

Dans une expression régulière, les sous-correspondances enregistrées sont stockées par ordre d'occurrence de gauche à droite. Le numéro de mémoire tampon dans lequel les sous-correspondances sont stockées va de 1 à 99 sous-expressions maximum. Dans l'expression régulière, vous pouvez accéder à chaque mémoire tampon en utilisant \n, où n correspond à un ou deux chiffres décimaux qui identifient une mémoire tampon spécifique.

Les références arrière permettent de rechercher l'occurrence de deux mots identiques dans le texte. Prenons l'exemple suivant :Is is the cost of of gasoline going up up?

Cette phrase contient plusieurs mots en double. Il pourrait s'avérer utile de concevoir un moyen de corriger la phrase sans avoir à rechercher les doublons de chaque mot. L'expression régulière JScript suivante utilise une seule sous-expression pour effectuer cette opération.

/\b([a-z]+) \1\b/gi

Dans ce cas, la sous-expression correspond aux éléments entre parenthèses. Cette sous-expression comporte au moins un caractère alphabétique, comme dans [a-z]+. La deuxième partie de l'expression régulière indique la référence à la sous-correspondance préalablement enregistrée, à savoir à la deuxième occurrence du mot correspondant précisément à l'expression entre parenthèses. \1 permet de spécifier la première sous-correspondance.

Grâce aux métacaractères délimitant les mots (\b), seuls les mots séparés sont détectés. Sinon, une expression telle que « is issued » ou « this is » " pourrait erronément être identifiée par cette expression.

L'exemple suivant répertorie les mots en double. Il montre comment récupérer des correspondances et des sous-correspondances dans le code.

var result;

var re = /\b([a-z]+) \1\b/gi
var src = "Is is the cost of of gasoline going up up?"

// Get the first match.
result = re.exec(src);

while (result != null)
{
    // Show the entire match.
    print();
    print(result[0]);

    // Show the submatches.
    for (var index = 1; index < result.length; index++)
    {
        print("submatch " + index + ": " + result[index]);
    }

    // Get the next match.
    result = re.exec(src);
}

// Output:
//  Is is
//  submatch 1: Is

//  of of
//  submatch 1: of

//  up up
//  submatch 1: up

Vous pouvez également faire référence à une sous-expression à partir d'une chaîne de remplacement.

L'exemple suivant s'appuie sur l'expression régulière ci-dessus pour remplacer une occurrence de deux mots identiques qui se suivent par une seule occurrence du même mot. Dans la méthode replace, $1 fait référence à la première sous-correspondance enregistrée. Pour faire référence à plusieurs sous-correspondances consécutives, utilisez $2, $3, et ainsi de suite.

var re = /\b([a-z]+) \1\b/gi
var src = "Is is the cost of of gasoline going up up?"
var result = src.replace(re, "$1");
print(result);
// Output:
//  Is the cost of gasoline going up?

L'exemple suivant permute chaque paire de mots dans la chaîne.

var re = /(\S+)(\s+)(\S+)/gi
var src = "The quick brown fox jumps over the lazy dog."
var result = src.replace(re, "$3$2$1");
print(result);
// Output:
//  quick The fox brown over jumps lazy the dog.

Voir aussi

Référence

replace, méthode

Concepts

Alternative et sous-expressions

Autres ressources

Introduction aux expressions régulières