我正在使用CKEditor编辑和保存HTML内容。
在某些情况下,有时可能会有很多
<p> </p>
<p> </p>
堆积。
我正在尝试编写一些Javascript脚本来识别字符串中是否有超过2个<p> </p>
,如果有,则将它们全部替换为2。因此,如果有3个,则替换为2。 4,然后替换为2,依此类推。
那样,最多只能有2个。
我不知道从哪里开始,一直在网上搜寻创意,但是一无所获。有关可能存在的某些库的任何建议,或者有人对我如何使用javascript正则表达式和字符串替换来实现这一目标有一些简单的建议或示例?
感谢任何指针。
答案 0 :(得分:2)
尝试一下:
var text = "<p> </p>\n<p> </p>\n<p> </p>something else<p> </p>\n<p> </p>something else<p> </p><p> </p><p> </p><p> </p>";
text.replace(/(<p> <\/p>\s*){3,}/g, '<p> </p><p> </p>');
答案 1 :(得分:0)
首先,我必须说,您需要阅读以下内容: How to create a Minimal, Complete, and Verifiable example TLDR:下次分享您到目前为止的尝试。
第二,我编写了易于理解的代码,并显示了如何解决这种替换的基本方法。
const $ = (selector, startNode = document) => [...startNode.querySelectorAll(selector)];
const nbsp = '<p> </p>';
const greg = new RegExp(nbsp, 'g');
const count = function (s) {
return (s.match(greg)||[]).length;
};
const cleanContent = function (contentTag) {
var str = contentTag.innerHTML;
var occurr = count(str);
while (occurr > 2) {
str = str.replace(new RegExp(nbsp), '');
occurr = count(str);
}
contentTag.innerHTML = str;
};
$('.content').forEach(cleanContent);
.content {
border: 1px solid black;
counter-reset: p;
}
.content p {
margin: 0;
}
.content p:before {
counter-increment: p;
content: "p: " counter(p);
}
<div class="content">
<p> </p>
<p> </p>
<p> </p>
<p> </p>
<p> </p>
<p> </p>
</div>
<div class="content">
<p> </p>
<p> </p>
<p> </p>
<p> </p>
</div>