Ganti Javascript dengan referensi ke grup yang cocok?

228

Saya punya string, seperti hello _there_. Saya ingin mengganti dua garis bawah dengan <div>dan </div>masing - masing, menggunakan JavaScript . Output akan (oleh karena itu) terlihat seperti hello <div>there</div>. String mungkin berisi beberapa pasang garis bawah.

Apa yang saya cari adalah cara untuk baik menjalankan fungsi pada setiap pertandingan, cara Ruby melakukannya:

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

Atau bisa mereferensikan grup yang cocok, sekali lagi cara itu dapat dilakukan di ruby:

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

Ada ide atau saran?

Sinan Taifour
sumber

Jawaban:

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

Oh, atau Anda juga bisa:

"hello _there_".replace(/_(.*?)_/, "<div>$1</div>")
airportyh
sumber
10
Apakah Javascript digunakan $1sebagai pengganti \1? Apakah seseorang akan memberikan tautan ke dokumentasi?
daveloyall
3
replacementValuedapat menjadi fungsi dan melewati argumen yang berbeda berdasarkan kelompok tangkapan? Luar biasa!
daveloyall
4
saya menemukan \ 1 bekerja tetapi $ 1 TIDAK walaupun saya menggunakan variasi RegExp: developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/…
jsh
1
@CalculatorFeline Mengatakan "regex itu sendiri" tidak mengidentifikasi yang mana, karena seseorang mungkin mencoba menggunakan regex untuk penggantian. Harus ada banyak orang yang mencoba untuk melakukan hal ini: "hello _there_".replace(/_(.*?)_/, /<div>\1<\/div>/).
Stewart
2
Dokumentasi tentang fungsi ganti developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/…
Naramsim
35

Anda bisa menggunakan replacebukan gsub.

"hello _there_".replace(/_(.*?)_/g, "<div>\$1</div>")
Eifion
sumber
19
Anda dapat menghapus garis miring terbalik.
CalculatorFeline
7

Untuk string pengganti dan pola penggantian seperti yang ditentukan oleh $. di sini resume:

masukkan deskripsi gambar di sini

tautan ke doc: di sini

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



catatan:

Jika Anda ingin memiliki $dalam penggunaan string pengganti $$. Sama seperti dengan sistem potongan vscode.

Mohamed Allal
sumber