Lompati ke konten utama
Modul 7 · Pelajaran 3 dari 427/32 dalam kursus~12 min
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.

JS
'prezzi: 10 20 30'.replace(/\d+/g, (m) => Number(m) * 1.22);
// "prezzi: 12.2 24.4 36.6" (22% VAT)

Argumen panggilan balik

JS
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).
JS
'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

Latihan#regex.m7.l3.e1
Upaya: 0Memuat…

Temukan setiap bilangan bulat dalam teks. (Sebagai gantinya, Anda akan meneruskan `(m) => Number(m) * 2` untuk menggandakannya.)

Memuat editor…
Tunjukkan petunjuk

Gunakan \\d+ (satu digit atau lebih) untuk menangkap setiap bilangan bulat sebagai satu kecocokan.

Solusi tersedia setelah 3 upaya

Tinjau latihan

Latihan#regex.m7.l3.e2
Upaya: 0Memuat…

Temukan setiap email (bentuk sederhana: huruf/digit/titik/garis bawah @ domain). Dengan cara ini panggilan balik dapat menyuntingnya menjadi `***@domain`.

Memuat editor…
Tunjukkan petunjuk

Perluas kelas menjadi [\\w.]+ untuk menerima titik pada nama pengguna dan domain.

Solusi tersedia setelah 3 upaya

Tantangan tambahan

Latihan#regex.m7.l3.e3
Upaya: 0Memuat…

Match every word consisting of letters in the text, so it can be transformed to uppercase via a callback.

Memuat editor…
Tunjukkan petunjuk

Temukan huruf sederhana dengan [a-zA-Z]+.

Solusi tersedia setelah 3 upaya