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?

Sinan Taifour
la source

Réponses:

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

Oh, ou vous pourriez aussi:

"hello _there_".replace(/_(.*?)_/, "<div>$1</div>")
airportyh
la source
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
2
Documentation sur la fonction remplacer developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/…
Naramsim
35

Vous pouvez utiliser à la replaceplace de gsub.

"hello _there_".replace(/_(.*?)_/g, "<div>\$1</div>")
Eifion
la source
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.

Mohamed Allal
la source