我正在尝试取消对某些html实体的转义,为此,我修改了在SO上某处找到的一小段代码(相反)。现在我遇到的问题是,转义字符的十六进制和Dec表示似乎允许具有任意数量的前导零。自然,我想排除这些零,以便查找相同的字符,无论是&x0022;
还是&x22;
。目前,我的代码如下:
var entityMapRev = {
'amp': '&',
'lt': '<',
'gt': '>',
'quot': '"',
'#34': '"',
'#38': '&',
'#39': '\'',
'#60': '<',
'#62': '>',
'#91': '[',
'#93': ']',
'#x22': '"',
'#x26': '&',
'#x27': '\'',
'#x2F': '/',
'#x60': '`',
'#x3C': '<',
'#x3D': '=',
'#x3E': '>',
'#x5B': '[',
'#x5D': ']',
};
function unescapeHtml (string) {
return String(string).replace(/�*(\d+?);/g, function (s,p1) {
return entityMapRev['#'+p1];
}).replace(/�*(\d+?);/g, function (s,p1) {
return entityMapRev['#x'+p1];
}).replace(/&(.+?);/g, function (s,p1) {
return entityMapRev[p1];
});
}
如您所见,首先尝试十进制表示,然后是十六进制,然后写出。
现在我的问题是,我可以在单个正则表达式中做到这一点吗?我知道该如何匹配这两种形式,但是我遇到的问题是,组仍然包含零,这不适用于当前的查找。
如果这不可能,那么有人知道更好的方法吗?