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?

Respostas:


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

Ah, ou você também pode:

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

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>")

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.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.