Javascript sostituisce con riferimento al gruppo corrispondente?


228

Ho una stringa come hello _there_. Vorrei sostituire i due trattini bassi con <div>e </div>, rispettivamente, usando JavaScript . L'output sarebbe (quindi) simile hello <div>there</div>. La stringa potrebbe contenere più coppie di caratteri di sottolineatura.

Quello che sto cercando è un modo per entrambi eseguire una funzione su ogni partita, il modo in cui lo fa Rubino:

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

O essere in grado di fare riferimento a un gruppo abbinato, ancora una volta come può essere fatto in ruby:

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

Qualche idea o suggerimento?

Risposte:


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

Oh, o potresti anche:

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

10
Javascript utilizza $1invece di \1? Qualcuno fornirebbe un collegamento alla documentazione?
Daveloyall,

3
replacementValuepuò essere una funzione e vengono passati diversi argomenti in base ai gruppi di cattura? Sorprendente!
Daveloyall,

4
ho trovato \ 1 funzionato ma $ 1 NON ha funzionato sebbene io
stia

1
@CalculatorFeline Dire "la regex stessa" non identifica quale, in quanto qualcuno potrebbe tentare di utilizzare una regex per la sostituzione. Ci devono essere molte persone che cercano di fare questo: "hello _there_".replace(/_(.*?)_/, /<div>\1<\/div>/).
Stewart,

2
La documentazione sulla funzione sostituisce developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/…
Naramsim

35

Puoi usare replaceinvece di gsub.

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

19
È possibile rimuovere la barra rovesciata.
Calcolatrice

7

Per la stringa di sostituzione e il modello di sostituzione come specificato da $. qui un curriculum:

inserisci qui la descrizione dell'immagine

link a doc: qui

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



Nota:

Se si desidera avere un $nella stringa di sostituzione utilizzare $$. Come per il sistema snippet vscode.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.