Регкс для определения HTML-тега запущен, но не закрыт - PullRequest
0 голосов
/ 14 мая 2019

У меня есть требование, где я должен определить 2 балла.

  1. Заменить все теги, которые имеют закрытый тег, но исключают несколько тегов, таких как <a></a>, <p></p>, <i></i>.Для этого я сделал много исследований и разработок, но не смог найти точное решение.Мое окончательное нахождение regx: (?!<p|a|i|>)(?<opentag><(?!/)[^>]*[^/]>)

Но это также поиск тега, который не имеет закрывающего тега Как <abc>

ПРИМЕЧАНИЕ: В этом я хочузаменить начало и закрыть тег пробелом.

Если у нас есть тег, который не имеет закрывающего тега, то я хочу удалить только специальный символ, а не весь тег.<abc> должно быть abc

Пример:

Строка ввода:

   <br />
   <ul id="matchMe" type="square">
      <li>stuff...</li>
      <li>more stuff</li>
      <li>
          <div>
               <span>still more</span>
               <ul>
                    <li>Another &gt;ul&lt;, oh my!</li>
                    <li>...</li>
               </ul>
          </div>
      </li>
   </ul>
<p>....</p>
<p class="hhh">....</p>

<customTag1> Hello <CustomTag2>

Выходная строка:

      stuff...
      more stuff


               still more

                    Another &gt;ul&lt;, oh my!
                    ...




<p>....</p>
<p class="hhh">....</p>

customTag1 Hello CustomTag2

В этом примере я не хочу ничего делать с тегом p, но все другие теги, имеющие самозакрывающийся тег или закрывающий тег, следует заменить пустыми.customTag1 и CustomTag2 оба тега являются пользовательскими и выглядят как HTML-тег начала, но не имеют конечного тега.Для этих тегов я просто хочу удалить только символ <,>.

Здесь помогли несколько ответов, но не полностью https://stackoverflow.com/a/7564061/4813631 https://stackoverflow.com/a/10267932/4813631

Спасибо

1 Ответ

0 голосов
/ 16 мая 2019

Должно работать:

let html = `<br />
<ul id="matchMe" type="square">
   <li>stuff...</li>
   <li>more stuff</li>
   <li>
       <div>
            <span>still more</span>
            <ul>
                 <li>Another &gt;ul&lt;, oh my!</li>
                 <li>...</li>
            </ul>
       </div>
   </li>
</ul>
<p>....</p>
<p class="hhh">....</p>

<customTag1> Hello <CustomTag2>
`
let allInitialsTags = html.match(/<([a-zA-Z\d]*(?=\s)*(?!\/))/g)
allInitialsTags = allInitialsTags.map(el=>el.replace("<",''))
let allEndTags = html.match(/(<\/[a-zA-Z\d]*\s*)/g)
allEndTags = allEndTags.map(el=>el.replace("</",''))
const tagWithNotClosingTag = []
allInitialsTags.forEach(el=>{
     if(!allEndTags.includes(el)){
          tagWithNotClosingTag.push(el)
     }
})
tagWithNotClosingTag.forEach(el=> {
     html = html.replace(RegExp(`<${el}>`,'g'),`${el}`)
})

const result = html.replace(/<[^(p|a|i)]?[^(\/p|\/a)?][^>]*>/g,"")
console.log(result)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...