Odstraňte prázdné značky pomocí RegEx

Chci smazat prázdné značky, jako je <label></label> , <font> </font> takže:

<label></label><form></form>
<p>This is <span style="color: red;">red</span> 
<i>italic</i>
</p>

bude vyčištěno jako:

<p>This is <span style="color: red;">red</span> 
<i>italic</i>
</p>

Mám tento RegEx v javascriptu, ale odstraní prázdné značky, ale také odstraní toto:"<i>italic</i></p>"

str=str.replace(/<[S]+></[S]+>/gim, "");

Co mi chybí?

Odpověď

Jako třídu znaků máte „bez mezer“, což znamená „<i>italic</i></p> “ se bude shodovat. První polovina vašeho regulárního výrazu bude odpovídat „<(i>italic</i)> “ a druhá polovina „</(p)> “. (Použil jsem závorky, abych ukázal, co každý [S]+ shoduje se.)

Změňte toto:

/<[S]+></[S]+>/

K tomu:

/<[^/>][^>]*></[^>]+>/

Celkově byste měli opravdu používat správný HTML procesor, ale pokud žráte HTML polévku, mělo by to stačit 🙂