Javascript mit Bezug auf übereinstimmende Gruppe ersetzen?

227

Ich habe eine Zeichenfolge wie hello _there_. Ich möchte die zwei Unterstrichen mit ersetzen <div>und </div>jeweils mit JavaScript . Die Ausgabe würde (daher) so aussehen hello <div>there</div>. Die Zeichenfolge kann mehrere Unterstrichpaare enthalten.

Was ich suche, ist eine Möglichkeit, entweder eine Funktion für jedes Spiel auszuführen, wie Ruby es tut:

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

Oder Sie können auf eine übereinstimmende Gruppe verweisen, wie es in Ruby möglich ist:

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

Irgendwelche Ideen oder Vorschläge?

Sinan Taifour
quelle

Antworten:

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

Oh, oder du könntest auch:

"hello _there_".replace(/_(.*?)_/, "<div>$1</div>")
Airportyh
quelle
10
Verwendet Javascript $1statt \1? Würde jemand einen Link zur Dokumentation bereitstellen?
Daveloyall
3
replacementValuekann eine Funktion sein und es werden verschiedene Argumente basierend auf den Fanggruppen übergeben? Tolle!
Daveloyall
4
Ich fand \ 1 funktionierte, aber $ 1 funktionierte NICHT, obwohl ich die RegExp-Variante verwende: developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/…
jsh
1
@CalculatorFeline Wenn Sie "die Regex selbst" sagen, wird nicht identifiziert, welche, da möglicherweise jemand versucht, eine Regex für das Ersetzen zu verwenden. Es müssen viele Leute sein, die versuchen, dies zu tun : "hello _there_".replace(/_(.*?)_/, /<div>\1<\/div>/).
Stewart
2
Dokumentation über die Funktion ersetzen developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/…
Naramsim
34

Sie können replaceanstelle von verwenden gsub.

"hello _there_".replace(/_(.*?)_/g, "<div>\$1</div>")
Eifion
quelle
19
Sie können den Backslash entfernen.
CalculatorFeline
6

Für die Ersatzzeichenfolge und das Ersatzmuster gemäß Angabe von $. hier ein Lebenslauf:

Geben Sie hier die Bildbeschreibung ein

Link zum Dokument: hier

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



Hinweis:

Wenn Sie eine $in der Ersatzzeichenfolge haben möchten, verwenden Sie $$. Gleich wie beim vscode-Snippet-System.

Mohamed Allal
quelle