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 nullprototipi 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 replacementsbir Objectdeğil, bir demeniz gerekir Array.