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?

Jawaban:


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

Oh, atau Anda juga bisa:

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

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


35

Anda bisa menggunakan replacebukan gsub.

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

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.

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.