Javascript remplace-t-il par référence au groupe correspondant?


228

J'ai une chaîne, comme hello _there_. Je voudrais remplacer les deux traits de soulignement par <div>et </div>respectivement, en utilisant JavaScript . La sortie ressemblerait donc à hello <div>there</div>. La chaîne peut contenir plusieurs paires de traits de soulignement.

Ce que je cherche est un moyen de soit exécuter une fonction sur chaque match, la façon dont il le fait Ruby:

"hello _there_".gsub(/_.*?_/) { |m| "<div>" + m[1..-2] + "</div>" }

Ou être capable de référencer un groupe apparié, encore une fois comme cela peut être fait en rubis:

"hello _there_".gsub(/_(.*?)_/, "<div>\\1</div>")

Des idées ou des suggestions?

Réponses:


384
"hello _there_".replace(/_(.*?)_/, function(a, b){
    return '<div>' + b + '</div>';
})

Oh, ou vous pourriez aussi:

"hello _there_".replace(/_(.*?)_/, "<div>$1</div>")

10
Javascript est-il utilisé à la $1place de \1? Quelqu'un fournirait-il un lien vers la documentation?
daveloyall

3
replacementValuepeut être une fonction et il est passé différents arguments en fonction des groupes de capture? Incroyable!
daveloyall

4
J'ai trouvé que \ 1 fonctionnait mais $ 1 ne fonctionnait PAS bien que j'utilise la variante RegExp: developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/…
jsh

1
@CalculatorFeline Dire "l'expression régulière elle-même" n'identifie pas lequel, car quelqu'un pourrait essayer d'utiliser une expression régulière pour le remplacer. Il doit y avoir beaucoup de gens essaient de le faire: "hello _there_".replace(/_(.*?)_/, /<div>\1<\/div>/).
Stewart


35

Vous pouvez utiliser à la replaceplace de gsub.

"hello _there_".replace(/_(.*?)_/g, "<div>\$1</div>")

19
Vous pouvez supprimer la barre oblique inverse.
CalculatorFeline

7

Pour la chaîne de remplacement et le modèle de remplacement spécifiés par $. ici un CV:

entrez la description de l'image ici

lien vers doc: ici

"hello _there_".replace(/_(.*?)_/g, "<div>$1</div>")



Remarque:

Si vous voulez avoir un $dans la chaîne de remplacement, utilisez $$. Identique au système d'extraits de code vscode.

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.