Удаление последней строки появления строки 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>"

Прежде всего, прочтите meta.stackexchange.com/q/22186/286047. А потом Как спросить.

CBroe 11.04.2018 12:10

Взгляните на RegExps.

D. Pardal 11.04.2018 12:11

Итак, вы хотите удалить разрывы строк после второго p?

gurvinder372 11.04.2018 12:13

Вы хотите удалить все последние (до тех пор, пока эта строка не перестанет отображаться в конце) или иметь параметр, который составляет количество, которое вы хотите удалить, и удалить это количество?

Joe Iddon 11.04.2018 12:14

это может быть после n номера тега p .. но да, в этом примере это второй

PalamCoder 11.04.2018 12:15

@ JoeIddon .. да, я хочу удалить все последние ... но не тот, который находится между содержимым.

PalamCoder 11.04.2018 12:16
3
6
49
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Нет необходимости в регулярном выражении, когда вам доступен встроенный парсер 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));
Ответ принят как подходящий
"<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

Другие вопросы по теме