Anda dapat melakukan referensi ulang seperti ini di JavaScript:
var str = "123 $test 123";
str = str.replace(/(\$)([a-z]+)/gi, "$2");
Ini akan (sangat konyol) menggantikan "$ test" dengan "test". Tapi bayangkan saya ingin meneruskan string hasil $ 2 ke dalam fungsi, yang mengembalikan nilai lain. Saya mencoba melakukan ini, tetapi bukannya mendapatkan string "test", saya mendapatkan "$ 2". Apakah ada cara untuk mencapai ini?
// Instead of getting "$2" passed into somefunc, I want "test"
// (i.e. the result of the regex)
str = str.replace(/(\$)([a-z]+)/gi, somefunc("$2"));
javascript
regex
backreference
quano
sumber
sumber
$1
dan$2
adalah nama parameter yang dipilih pengguna di sini (dipilih untuk meniru simbol referensi latar); yang - bervariasi! - jumlah parameter ini sesuai dengan jumlah grup tangkapan di regex.Teruskan fungsi sebagai argumen kedua ke
replace
:Kemampuan ini telah ada sejak Javascript 1.3, menurut mozilla.org .
sumber
Menggunakan ESNext, cukup menggantikan tautan tiruan tetapi hanya untuk menunjukkan cara kerjanya:
sumber
Catatan: Jawaban sebelumnya kehilangan beberapa kode. Sekarang sudah diperbaiki + contoh.
Saya membutuhkan sesuatu yang sedikit lebih fleksibel untuk penggantian regex untuk memecahkan kode unicode dalam data JSON saya yang masuk:
sumber
Jika Anda memiliki referensi latar dalam jumlah variabel maka jumlah argumen (dan tempat) juga variabel. The MDN Web Docs menggambarkan sintaks follwing untuk sepcifing fungsi sebagai argumen pengganti:
Misalnya, ambil ekspresi reguler berikut:
Anda tidak dapat menggunakan variabel 'argumen' di sini karena itu adalah tipe
Arguments
dan tidak ada tipeArray
sehingga tidak memilikislice()
metode.sumber