gpt4 book ai didi

javascript - 在javascript中使用正则表达式删除html标签

转载 作者:行者123 更新时间:2023-11-28 15:30:00 27 4
gpt4 key购买 nike

我想删除除 <a> 之外的所有 html 标签<img><iframe>使用此代码来自文档:

var regex = "<(?!a )(?!img )(?!iframe )([\s\S]*?)>";
var temp;
while (source.match(regex)) {
temp = source.match(regex)[0];
source = source.replace(temp, "");
}
return source;

它适用于在线正则表达式测试器,但由于某种原因它不适用于我的页面。例如,当输入为:

时,它返回原始字符串:
    "<p class="MsoNormal" style="margin-left:202.5pt;line-height:200%;background:white"><b><span style="font-size: 16pt; line-height: 200%; color: rgb(131, 60, 11); background-image: initial; background-attachment: initial; background-size: initial; background-origin: initial; background-clip: initial; background-position: initial; background-repeat: initial;">test</span></b><span style="font-size:16.0pt;
line-height:200%;color:#833C0B;letter-spacing:-.15pt;mso-ansi-language:EN-US"><o:p></o:p></span></p>"

请帮忙!

最佳答案

无需正则表达式即可完成此操作。尝试使用正则表达式解析 HTML 通常不是一个好主意,除非用例非常简单......

我实现 stripHtmlElementsMatching 的方式,您可以向它传递任何 CSS 选择器,它会删除所有匹配的实体。

因此,要删除除 a、img、iframe 之外的任何内容,您可以传递 :not(a):not(img):not(iframe)

PS:htmlstripping-root 自定义标记只是为了避免创建干扰传递的选择器的解析器元素。例如,如果我使用 div 作为解析器元素,并且您将传递选择器 div > div,则所有 div 都会被删除,即使它们没有嵌套在 html 字符串中.

var stripHtmlElementsMatching = (function(doc) {

doc.registerElement('htmlstripping-root');

return function(text, selector) {

var parser = document.createElement('htmlstripping-root'),
matchingEls, i, len, el;

selector = typeof selector == 'string' ? selector : ':not(*)';
parser.innerHTML = text;

matchingEls = parser.querySelectorAll(selector);

for (i = 0, len = matchingEls.length; i < len; i++) {
el = matchingEls[i];
el.parentNode.replaceChild(newFragFrom(el.childNodes), el);
}

return parser.innerHTML;
};

function newFragFrom(nodes) {
var frag = document.createDocumentFragment();

while (nodes.length) frag.appendChild(nodes[0]);

return frag;
}

})(document);


var text = '<p class="MsoNormal" style="margin-left:202.5pt;line-height:200%;background:white"><b><span style="font-size: 16pt; line-height: 200%; color: rgb(131, 60, 11); background-image: initial; background-attachment: initial; background-size: initial; background-origin: initial; background-clip: initial; background-position: initial; background-repeat: initial;">test</span></b><span style="font-size:16.0pt; line-height:200%;color:#833C0B;letter-spacing:-.15pt;mso-ansi-language:EN-US"><o:p></o:p></span></p>';

var tagsToKeep = ['a', 'img', 'iframe'];

var sanitizeSelector = tagsToKeep.map(function(tag) {
return ':not(' + tag + ')';
}).join('');

var sanitizedText = stripHtmlElementsMatching(text, sanitizeSelector);

document.body.appendChild(document.createTextNode(sanitizedText));

关于javascript - 在javascript中使用正则表达式删除html标签,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27760932/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com