Modül dersleri (3/4)
Geri aramayla değiştirin
Değiştirme dizesi yeterli değilse bir işlev iletin:
str.replace(regex, (match, ...groups) => string). Geri arama çağrılır
her maç için ve dönüş değeri yerine geçer.
'prezzi: 10 20 30'.replace(/\d+/g, (m) => Number(m) * 1.22);
// "prezzi: 12.2 24.4 36.6" (22% VAT)Geri arama argümanları
str.replace(regex, (match, p1, p2, ..., offset, original, groups) => ...);match-- maçın tamamı.p1,p2, \u2026 -- yakalanan gruplar sırayla.offset-- orijinal dizedeki eşleşmenin dizini.original-- dizenin tamamı.groups-- adlandırılmış gruplara (varsa) sahip nesne.
'2024-03-15'.replace(/(\d{4})-(\d{2})-(\d{2})/, (_, a, m, g) => `${g}/${m}/${a}`);
// "15/03/2024"Geri arama size isteğe bağlı güç verir: ayrıştırma, arama, dönüştürme, HTML statik bir dizenin yapamayacağı her şeyden kaçmak.
Geri aramaları değiştirmede gelişmiş argümanlar
Geri çağırma işlevi birkaç argüman alır: tam eşleşme, yakalanan her grup, tüm metin içindeki eşleşmenin uzaklığı ve orijinal giriş dizesi. Bu, karmaşık bağlam tabanlı dönüşüm mantığını mümkün kılar.
Deneyin
Metindeki her tamsayıyı bulun. (Bunun yerine iki katına çıkarmak için `(m) => Number(m) * 2` komutunu geçirirsiniz.)
İpucu göster
Her tamsayıyı tek bir eşleşme olarak yakalamak için \\d+ (bir veya daha fazla rakam) kullanın.
3 denemeden sonra çözüm mevcut
Alıştırmayı gözden geçirin
Her e-postayı bulun (basitleştirilmiş form: harfler/rakamlar/noktalar/alt çizgi @ etki alanı). Bu şekilde bir geri arama onu "***@domain" olarak düzenleyebilir.
İpucu göster
Kullanıcı adında ve etki alanında noktaları kabul etmek için sınıfı [\\w.]+ olarak genişletin.
3 denemeden sonra çözüm mevcut
Ek zorluk
Match every word consisting of letters in the text, so it can be transformed to uppercase via a callback.
İpucu göster
[a-zA-Z]+ ile basit harfleri bulun.
3 denemeden sonra çözüm mevcut