RegEx否定前瞻仅匹配一个字符

问题描述 投票:1回答:1

我写了一个正则表达式,它应该匹配除<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:相匹配,但应与以下内容匹配:incorrect match

我在哪里弄错了?

请参见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 = {
            '&': '&amp;',
            '<': '&lt;',
            '>': '&gt;',
            '"': '&quot;',
            '\'': '&#39;',
            '/': '&#x2F;',
        };

        return entityMap[s];
    });
}
regex regex-negation
1个回答
1
投票
注意,当您完全控制纯文本字符串中显示的实体时,才可以使用正则表达式。>

因此,如果您手动添加</span><span style="background-color: #aaff11">之类的字符串,则可以像这样修复您的代码:

© www.soinside.com 2019 - 2024. All rights reserved.