我正在开发基于JavaScript& amp;的表情符号系统。 Github Emoji图标,我使用一个函数来触发打字事件,这是我的代码
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;
}
它运作良好,但并不聪明。
我尝试使用带for循环的数组来处理Github Emoji API
var data = {
star: "https://assets-cdn.github.com/images/icons/emoji/unicode/2b50.png?v7"
};
for (var i in data) {
console.log(data[i]);
}
for循环访问object属性但不显示它的名称,我需要替换属性名,我期望的最终代码是:
for (vari in data) {
var x = string.replace(/${property_name}/g, data[i]);
}
答案 0 :(得分:2)
试试这个:
for (var key in data) {
if (data.hasOwnProperty(key)) {
var x = string.replace(new RegExp(key, "g"), data[key]);
}
}
当您使用for(var i in data)
循环i
时,对象属性不是data[i]
此外,如果您想从字符串构造正则表达式模式,您必须创建一个RegExp
对象。
答案 1 :(得分:1)
为了完整性,更好的方法可能是避免循环并利用.replace
的能力来获取回调函数:
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]; });