Я пытаюсь удалить некоторые html-сущности, и для этого я изменил небольшой фрагмент кода, который нашел где-то на SO (что делает обратное). Теперь у меня проблема в том, что шестнадцатеричные и декартовые представления экранированных символов, по-видимому, имеют произвольное количество начальных нулей. Естественно, я хочу исключить эти нули для поиска того же символа, будь то &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];
});
}
Как видите, сначала он пробует десятичные представления, затем в шестнадцатеричном, а затем записывается.
Теперь мой вопрос, могу ли я сделать это в одном регулярном выражении? Я знаю, как сделать так, чтобы это совпадало с любой формой, но тогда у меня есть проблема с тем, что группы по-прежнему содержат нули, что не работает с моим текущим поиском.
Если это невозможно, кто-нибудь знает лучший способ сделать это?