【发布时间】:2019-11-26 08:49:16
【问题描述】:
我写了一个正则表达式,它应该匹配除<span style="background-color: #any-color"> 和</span> 之外的所有危险HTML 字符:
((?!<span style="background-color: #([A-Fa-f0-9]{6}|[A-Fa-f0-9]{3})">|<\/span>)[&<>"'/])
但是,它与我排除的额外字符匹配。
这里 RegEx 不应该匹配引号 style="background-color:,但它匹配:
我在哪里做错了?
见Regex101 demo。这里是link to the current project:
function escapeHtml(in_) {
return in_.replace(/((?!<span style="background-color: #([A-Fa-f0-9]{6}|[A-Fa-f0-9]{3})">|<\/span>)[&<>"'/])/g, s => {
const entityMap = {
'&': '&',
'<': '<',
'>': '>',
'"': '"',
'\'': ''',
'/': '/',
};
return entityMap[s];
});
}
【问题讨论】:
-
你要删除那些“危险的 HTML 字符”吗?
-
@WiktorStribiżew 不,我要转义这些字符。我知道在这样的操作之后,将它们插入标签主体以外的任何地方仍然很危险,但我将在那里插入生成的字符串。
-
这在没有 hack 的常规文本编辑器中不太可能。 This is a PCRE regex solution.
-
You should not use regular expressions to parse HTML。如果你打算使用 Javacript,为什么不使用内置函数呢?
-
@Seblor 这个问题与 HTML 解析无关。
标签: regex regex-negation