日期:2014-05-16 浏览次数:20415 次
String.method('deentityify', function() { //字符映射表,它映射字符的名字到对应的字符 var entity = { quot: '"', lt: '<', gt: '>' }; //返回deentityify方法 return function() { //这才是deentityify方法。它调用字符串的replace方法, //查找'&'开头和';'结束的子字符串。如果这些字符可以在字符映射表中找到, //那么就将该字符替换为映射表中的值,它用到了一个正则表达式(参见第七章) return this.replace(/&([^&;]+);/g, function(a, b) { var r = entity[b]; return typeof r === 'string' ? r : a; } ); }; } ()); function deentityifyTest() { return "< "> ".deentityify(); //输出<”> }
var str = '<div id="{wo}" >{ni}</div>'; str.replace(/\{([a-z]+)\}/ig, function(a, b, c, d) { alert(a); alert(b); alert(c); alert(d); });
------解决方案--------------------
给String类添加'deentityify'方法,用于反编码"< ">"。
return this.replace(/&([^&;]+);/g,
function(a, b) {
var r = entity[b];
return typeof r === 'string' ? r : a;
}
);
参数a是正则表达式(/&([^&;]+);/g(匹配所有&开始和;结束的字符串)匹配到的内容,如:可匹配到&或者"等。
参数b是正则表达式(/&([^&;]+);/g中括号中匹配的内容。如:a=",则b=quot
这样,由
var entity = {
quot: '"',
lt: '<',
gt: '>'
};
得
r=entity["quot"]='"';
同理
r=entity["lt"]="<";
r=entity["gt"]=">";