Замените соответствующий HTML-тег на Regexp, используя JavaScript - PullRequest
0 голосов
/ 28 мая 2018

[РЕДАКТИРОВАТЬ] Прежде всего: Я знаю, что с помощью инструментов манипулирования DOM вы можете легко изменять структуры DOM.(Они доступны в любом браузере и даже в Node сторонними библиотеками.)

Цель его вопроса состоит в том, может ли кто-нибудь придумать умную идею, если эта проблема может быть решенаот Regexp в JavaScript без DOM.

Спасибо! [Конец редактирования]

Допустим, у меня есть следующий HTML-фрагмент в виде строки :

<p>
    <div class="something">
        <span>
            <div class="else">My precious text.</div>
        </span>
    </div>
</p>

Я хочу избавиться от тегов <div class="something"> с помощью RegExp , чтобы получить что-то подобное (отступ не имеет значения):

<p>
    <span>
        <div class="else">My precious text.</div>
    </span>
</p>

Итак, моя попытка была:

htmlString.replace(/<div class="something">([\s\S]+?)<\/div>/gi, "$1");

Но она, конечно, будет соответствовать закрывающему тегу <div class="else">.

Как я могу сделать это правильно, используя только ванильJS и не использует инструменты манипулирования DOM браузера?(т.е. в узле)

1 Ответ

0 голосов
/ 28 мая 2018

Regex не лучший вариант для этого.Вам лучше использовать возможности запросов JS, если вы работаете с HTML, вот краткий пример того, что вы могли бы сделать (упрощенно для пояснения):

var htmlString = '<p><div class="something"><span><div class="else">My precious text.</div></span></div></p>';

//Create a DOM element so you can query what you need and manipulate it
var newElement = document.createElement("p");
newElement.innerHTML = htmlString;

//Find what you need to remove
var toRemove = newElement.getElementsByClassName("something")[0];
//Grab what you need to keep
var toKeep = toRemove.firstChild;

//Remove the unwanted element
newElement.removeChild(toRemove);

//Append the old child
newElement.appendChild(toKeep);

//If you really want it back as a string
newElement.outerHTML;

PS: Это недопустимоиметь div внутри элемента абзаца, так что вы получите непредсказуемые результаты.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...