Pelajaran modul (3/4)
Ganti dengan panggilan balik
Jika string pengganti tidak cukup, berikan fungsi:
str.replace(regex, (match, ...groups) => string). Panggilan balik dipanggil
untuk setiap kecocokan dan nilai kembaliannya menjadi penggantinya.
'prezzi: 10 20 30'.replace(/\d+/g, (m) => Number(m) * 1.22);
// "prezzi: 12.2 24.4 36.6" (22% VAT)Argumen panggilan balik
str.replace(regex, (match, p1, p2, ..., offset, original, groups) => ...);match-- keseluruhan pertandingan.p1,p2, \u2026 -- grup yang diambil secara berurutan.offset-- indeks kecocokan pada string asli.original-- keseluruhan string.groups-- objek dengan grup bernama (jika ada).
'2024-03-15'.replace(/(\d{4})-(\d{2})-(\d{2})/, (_, a, m, g) => `${g}/${m}/${a}`);
// "15/03/2024"Callback memberi Anda kekuatan sewenang-wenang: penguraian, pencarian, konversi, HTML meloloskan\u2026 segala sesuatu yang tidak dapat dilakukan oleh string statis.
Argumen tingkat lanjut dalam panggilan balik pengganti
Fungsi panggilan balik menerima beberapa argumen: kecocokan penuh, setiap grup yang diambil, offset kecocokan dalam keseluruhan teks, dan string masukan asli. Hal ini memungkinkan logika transformasi berbasis konteks yang canggih.
Cobalah
Temukan setiap bilangan bulat dalam teks. (Sebagai gantinya, Anda akan meneruskan `(m) => Number(m) * 2` untuk menggandakannya.)
Tunjukkan petunjuk
Gunakan \\d+ (satu digit atau lebih) untuk menangkap setiap bilangan bulat sebagai satu kecocokan.
Solusi tersedia setelah 3 upaya
Tinjau latihan
Temukan setiap email (bentuk sederhana: huruf/digit/titik/garis bawah @ domain). Dengan cara ini panggilan balik dapat menyuntingnya menjadi `***@domain`.
Tunjukkan petunjuk
Perluas kelas menjadi [\\w.]+ untuk menerima titik pada nama pengguna dan domain.
Solusi tersedia setelah 3 upaya
Tantangan tambahan
Match every word consisting of letters in the text, so it can be transformed to uppercase via a callback.
Tunjukkan petunjuk
Temukan huruf sederhana dengan [a-zA-Z]+.
Solusi tersedia setelah 3 upaya