Orijinal sorunun gereksinimleri, rasgele değiştirme anahtarlarının çalışma zamanında işlenmesi gibi göründüğü için, dize enterpolasyonundan yararlanamadı.
Bununla birlikte , sadece dize enterpolasyonu yapmanız gerekiyorsa, şunu kullanabilirsiniz:
const str = `My name is ${replacements.name} and my age is ${replacements.age}.`
Dizeyi sınırlayan geri işaretlere dikkat edin, bunlar gereklidir.
Belirli OP'nin gereksinimlerine uygun bir yanıt String.prototype.replace()
için, değiştirmeler için kullanabilirsiniz .
Aşağıdaki kod tüm eşleşmeleri ele alır ve değiştirilmeden dokunmaz (değiştirme değerleriniz tüm dizeler olduğu sürece, değilse aşağıya bakın).
var replacements = {"%NAME%":"Mike","%AGE%":"26","%EVENT%":"20"},
str = 'My Name is %NAME% and my age is %AGE%.';
str = str.replace(/%\w+%/g, function(all) {
return replacements[all] || all;
});
jsFiddle .
Değiştirmelerinizden bazıları dizge değilse, önce nesnede bulunduklarından emin olun. Örneğe benzer bir formatınız varsa, yani yüzde işaretleri içine alınmışsa,in
başarmak operatörü .
jsFiddle .
Bununla birlikte, biçiminizin özel bir biçimi yoksa, yani herhangi bir dizge varsa ve değiştirilen nesnenizin bir null
prototipi Object.prototype.hasOwnProperty()
yoksa, değiştirilen olası alt dizelerinizin hiçbirinin prototipteki özellik adlarıyla çakışmayacağını garanti edemediğiniz sürece kullanın .
jsFiddle .
Aksi takdirde, yerine koyduğunuz dizge 'hasOwnProperty'
olsaydı, sonuçta karışık bir dize alırdınız.
jsFiddle .
Bir yan not olarak, size replacements
bir Object
değil, bir demeniz gerekir Array
.