Vous pouvez revenir en arrière comme ceci dans JavaScript:
var str = "123 $test 123";
str = str.replace(/(\$)([a-z]+)/gi, "$2");
Cela remplacerait (assez ridicule) "$ test" par "test". Mais imaginez que j'aimerais passer la chaîne résultante de 2 $ dans une fonction, qui renvoie une autre valeur. J'ai essayé de faire cela, mais au lieu d'obtenir la chaîne "test", j'obtiens "$ 2". Y a-t-il un moyen d'y parvenir?
// Instead of getting "$2" passed into somefunc, I want "test"
// (i.e. the result of the regex)
str = str.replace(/(\$)([a-z]+)/gi, somefunc("$2"));
$1
et$2
les noms de paramètres choisis par l'utilisateur sont ici (choisis pour imiter les symboles de référence arrière); le - variant! - le nombre de ces paramètres correspond au nombre de groupes de capture dans la regex.Passez une fonction comme deuxième argument à
replace
:Cette fonctionnalité existe depuis Javascript 1.3, selon mozilla.org .
la source
En utilisant ESNext, un remplaçant de liens factice, mais juste pour montrer comment cela fonctionne:
la source
Remarque: il manquait du code dans la réponse précédente. C'est maintenant fixe + exemple.
J'avais besoin de quelque chose d'un peu plus flexible pour un remplacement de regex afin de décoder l'unicode dans mes données JSON entrantes:
la source
Si vous avez un nombre variable de références inverses, le nombre d'arguments (et les emplacements) sont également variables. Les documents Web MDN décrivent la syntaxe suivante pour définir une fonction comme argument de remplacement:
Par exemple, prenez ces expressions régulières:
Vous ne pouvez pas utiliser la variable «arguments» ici car elle est de type
Arguments
et non de typeArray
donc elle n'a pas deslice()
méthode.la source