删除字符串末尾的javascript字符串last occurrence字符串

时间:2018-04-11 10:09:31

标签: javascript

我有如下的字符串:

"<p>First sentence</p><p><br></p><p> second sentence</p><p><br></p><p><br></p><p><br></p><p><br></p>"

我想在<p><br></p>n个标签后删除字符串中<p>的所有最后一次出现。

预期结果:

"<p>First sentence</p><p><br></p><p> second sentence</p>"

2 个答案:

答案 0 :(得分:0)

当你可以使用内置的DOM解析器时,不需要正则表达式。

您需要检查当前p br之后的元素是否包含带有textContent的元素。

function removeBlanksAtEnd(str) {
  var el = document.createElement("div");
  el.innerHTML = str;
  console.log(el.querySelectorAll("p br").length);
  el.querySelectorAll("p br").forEach( s => {
     if ( !hasAnyContentAfterThisNode(s.parentNode) )
     {
        s.parentNode.parentNode.removeChild(s.parentNode);
     }
  });
  return el.innerHTML;
}

<强>演示

var str = `<p>First sentence</p><p><br></p><p> second sentence</p><p><br></p><p><br></p><p><br></p><p><br></p>`;

function removeBlanksAtEnd(str) {
  var el = document.createElement("div");
  el.innerHTML = str;
  console.log(el.querySelectorAll("p br").length);
  el.querySelectorAll("p br").forEach( s => {
     if ( !hasAnyContentAfterThisNode(s.parentNode) )
     {
        s.parentNode.parentNode.removeChild(s.parentNode);
     }
  });
  return el.innerHTML;
}

function hasAnyContentAfterThisNode(el)
{
   while( el.nextSibling )
   {
      var textValue = el.nextSibling.textContent.trim();
      console.log(textValue);
      if ( textValue.length > 0 )
      {
          return true;
      }
      el = el.nextSibling;      
   }
   return false;
}

console.log(removeBlanksAtEnd(str));

答案 1 :(得分:0)

"<p>First sentence</p><p><br></p><p> second sentence</p><p><br></p><p><br></p><p><br></p><p><br></p>".replace(/<p><br><\/p>?<p><br><\/p>/g,"")

容易, 选我,我是答案

<强>演示: https://codepen.io/anon/pen/JLzvYz

相关问题