Acceda al nombre de propiedad del object con for loop

Estoy trabajando en el sistema Emoji basado en los icons de JavaScript y Github Emoji, uso una function para activar el evento de tipeo, ese es mi código

function myFunction() { var y = document.getElementById("myInput").value; var x = y.replace(/plus/g,'<img width="25" src="https://assets-cdn.github.com/images/icons/emoji/unicode/1f44d.png?v7" />'); document.getElementById("demo").innerHTML = "You wrote: " + x; } 

está funcionando bien, pero no es inteligente.

Intenté usar una matriz con for loop para manejar la API Github Emoji

 var data = { star: "https://assets-cdn.github.com/images/icons/emoji/unicode/2b50.png?v7" }; for (var i in data) { console.log(data[i]); } 

el bucle for accede a la propiedad del object pero no muestra su nombre, necesito el nombre de la propiedad para replacelo, el código final que espero es:

 for (vari in data) { var x = string.replace(/${property_name}/g, data[i]); } 

Para completar, una mejor manera podría ser evitar el bucle y hacer uso de la capacidad de .replace para tomar una function de callback:

 var data = { star: "https://assets-cdn.github.com/images/icons/emoji/unicode/2b50.png?v7" }; var pattern = new RegExp(Object.keys(data).join('|'), 'g'); var x = string.replace(pattern, function(match) { return data[match]; }); 

Prueba esto:

 for (var key in data) { if (data.hasOwnProperty(key)) { var x = string.replace(new RegExp(key, "g"), data[key]); } } 

Cuando utiliza un bucle for(var i in data) i es la propiedad del object, no los data[i]

Además, si desea build un patrón regex a partir de una cadena, deberá crear un object RegExp .