编辑:这似乎还没有按预期工作。我应该用多个需要更换的实例对其进行测试。工作时会更新。
编辑2:在这里!应该像我最初预期的那样工作...... http://jsfiddle.net/Yy2yJ/
我根据 Scott 的评论创建了一个解决方案,可以在这里看到:http: //jsfiddle.net/faAsQ
我还没有对它进行足够彻底的测试以查看是否有任何问题 - 但如果这对您有帮助或您有改进,请在此处发表评论。干杯!
var untemplate = function(template, html) {
var names = [],
obj = {},
encodedHtml = escape(html);
var templateRegex = new RegExp(escape(template).replace(/[\\\/\.\-\*]/g, function(match) {
return '\\' + match;
}).replace(/%7B%7B([^(?:%7B)]+?)%7D%7D/g, function(match, name) {
names.push(name);
return '(.*?)';
}), 'g');
encodedHtml.replace(templateRegex, function() {
for(var i = 1; i < arguments.length - 2; i++) {
obj[names[i - 1]] = unescape(arguments[i]);
}
});
return obj;
}
console.log(untemplate('<div id="test">{{name}}</div><a>{{desc}}</a><a>{{desc2}}</a>', document.getElementById('container').innerHTML));