Javascript substituir por referência ao grupo correspondente?

228

Eu tenho uma string, como hello _there_. Gostaria de substituir os dois sublinhados por <div>e </div>respectivamente usando JavaScript . A saída seria (portanto) parecida hello <div>there</div>. A sequência pode conter vários pares de sublinhados.

O que eu estou procurando é uma maneira de tanto executar uma função em cada jogo, a forma como Ruby faz isso:

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

Ou consiga referenciar um grupo correspondente, novamente da maneira que pode ser feito em ruby:

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

Alguma idéia ou sugestão?

Sinan Taifour
fonte

Respostas:

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

Ah, ou você também pode:

"hello _there_".replace(/_(.*?)_/, "<div>$1</div>")
airportyh
fonte
10
Javascript usa em $1vez de \1? Alguém forneceria um link para a documentação?
daveloyall
3
replacementValuepode ser uma função e são transmitidos argumentos diferentes com base nos grupos de captura? Surpreendente!
daveloyall
4
Eu encontrei \ 1 funcionou, mas $ 1 NÃO, embora eu esteja usando a variação RegExp: developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/…
jsh
1
@CalculatorFeline Dizer "o próprio regex" não identifica qual deles, pois alguém pode estar tentando usar um regex para a substituição. Deve haver muitas pessoas que tentam fazer isso: "hello _there_".replace(/_(.*?)_/, /<div>\1<\/div>/).
Stewart
2
Documentação sobre a Função substituir developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/...
Naramsim
35

Você pode usar em replacevez de gsub.

"hello _there_".replace(/_(.*?)_/g, "<div>\$1</div>")
Eifion
fonte
19
Você pode remover a barra invertida.
CalculatorFeline
7

Para a sequência de substituição e o padrão de substituição, conforme especificado por $. aqui um resumo:

insira a descrição da imagem aqui

link para doc: aqui

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



Nota:

Se você deseja ter um $na seqüência de caracteres de substituição, use $$. O mesmo que com o sistema de trechos vscode.

Mohamed Allal
fonte