使用Javascript中的正则表达式替换字符串

时间:2019-03-13 09:54:35

标签: javascript

我正在使用CKEditor编辑和保存HTML内容。

在某些情况下,有时可能会有很多

<p>&nbsp;</p>

<p>&nbsp;</p>

堆积。

我正在尝试编写一些Javascript脚本来识别字符串中是否有超过2个<p>&nbsp;</p>,如果有,则将它们全部替换为2。因此,如果有3个,则替换为2。 4,然后替换为2,依此类推。

那样,最多只能有2个。

我不知道从哪里开始,一直在网上搜寻创意,但是一无所获。有关可能存在的某些库的任何建议,或者有人对我如何使用javascript正则表达式和字符串替换来实现这一目标有一些简单的建议或示例?

感谢任何指针。

2 个答案:

答案 0 :(得分:2)

尝试一下:

var text = "<p>&nbsp;</p>\n<p>&nbsp;</p>\n<p>&nbsp;</p>something else<p>&nbsp;</p>\n<p>&nbsp;</p>something else<p>&nbsp;</p><p>&nbsp;</p><p>&nbsp;</p><p>&nbsp;</p>";
text.replace(/(<p>&nbsp;<\/p>\s*){3,}/g, '<p>&nbsp;</p><p>&nbsp;</p>');

答案 1 :(得分:0)

首先,我必须说,您需要阅读以下内容: How to create a Minimal, Complete, and Verifiable example TLDR:下次分享您到目前为止的尝试。

第二,我编写了易于理解的代码,并显示了如何解决这种替换的基本方法。

const $ = (selector, startNode = document) => [...startNode.querySelectorAll(selector)];
const nbsp = '<p>&nbsp;</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>&nbsp;</p>
  <p>&nbsp;</p>
  <p>&nbsp;</p>
  <p>&nbsp;</p>
  <p>&nbsp;</p>
  <p>&nbsp;</p>
</div>
<div class="content">
  <p>&nbsp;</p>
  <p>&nbsp;</p>
  <p>&nbsp;</p>
  <p>&nbsp;</p>
</div>