正则表达式组排除组

时间:2019-04-25 06:52:39

标签: javascript regex

我正在尝试取消对某些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(/&#0*(\d+?);/g, function (s,p1) {
        return entityMapRev['#'+p1];
    }).replace(/&#x0*(\d+?);/g, function (s,p1) {
        return entityMapRev['#x'+p1];
    }).replace(/&(.+?);/g, function (s,p1) {
        return entityMapRev[p1];
    });
}

如您所见,首先尝试十进制表示,然后是十六进制,然后写出。

现在我的问题是,我可以在单个正则表达式中做到这一点吗?我知道该如何匹配这两种形式,但是我遇到的问题是,组仍然包含零,这不适用于当前的查找。

如果这不可能,那么有人知道更好的方法吗?

0 个答案:

没有答案