Javascript zastąpić odniesieniem do dopasowanej grupy?


228

Mam ciąg, taki jak hello _there_. Chciałbym wymienić dwie z podkreślenia <div>i </div>odpowiednio, przy użyciu JavaScript . Dane wyjściowe wyglądałyby (zatem) hello <div>there</div>. Ciąg może zawierać wiele par znaków podkreślenia.

Co szukam jest sposobem albo uruchomić funkcję na każdym meczu, w drodze Ruby czyni go:

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

Lub umieć odwoływać się do dopasowanej grupy, podobnie jak w Ruby:

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

Wszelkie pomysły lub sugestie?

Odpowiedzi:


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

Aha, możesz też:

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

10
Czy JavaScript używa $1zamiast \1? Czy ktoś poda link do dokumentacji?
daveloyall

3
replacementValuemoże być funkcją i przekazuje się różne argumenty na podstawie grup catch? Niesamowity!
daveloyall

4
znalazłem \ 1 zadziałało, ale 1 $ NIE, chociaż używam odmiany RegExp: developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/…
jsh

1
@CalculatorFeline Powiedzenie „sama regex” nie określa, który z nich, ponieważ ktoś może próbować użyć wyrażenia regularnego do zamiany. Nie może być wiele osób próbuje to zrobić: "hello _there_".replace(/_(.*?)_/, /<div>\1<\/div>/).
Stewart


35

Możesz użyć replacezamiast gsub.

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

19
Możesz usunąć ukośnik odwrotny.
CalculatorFeline

7

Dla zastępującego łańcucha i zastępczego wzorca określonego przez $. tutaj CV:

wprowadź opis zdjęcia tutaj

link do dokumentu: tutaj

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



Uwaga:

Jeśli chcesz mieć $ciąg zastępujący, użyj $$. Tak samo jak w przypadku systemu fragmentów vscode.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.