Regexp, чтобы выбрать первые n слов и HTML-теги вокруг них - PullRequest
0 голосов
/ 03 ноября 2019

Я знаю, что можно выбирать только слова или выбирать только теги HTML в заданной строке. Но можно ли выбрать оба?

В этом примере, скажем, мы хотим выбрать первые 5 слов и HTML-теги вокруг них:

Ввод:

<p><strong>This is</strong> <span style="font-size: 1em;">test</span> <strong><em>five</em></strong> words.</p> 
test <p>Lorem Ipsum is simply dummy text of the printing and typesetting industry.</p>

Ожидаемый результат:

<p><strong>This is</strong> <span style="font-size: 1em;">test</span> <strong><em>five</em></strong> words.</p>

Нетрудно написать регулярное выражение для соответствия всем словам или для всех тегов HTML, но не уверен, как достичь вышеуказанного результата, используя только регулярное выражение.

1 Ответ

0 голосов
/ 03 ноября 2019

Я знаю, что это не регулярное выражение, но это чистый javascript и в основном предпочтительный метод при работе с «выбором узлов» в документе: XPath.

С помощью этого фрагмента XPath вы выберете самый большой узел, содержащийтекст «Это тест»:

document.evaluate("/html/body//*[contains(.,'This is test')]", document);

В вашем примере будет выбран первый <p>, включая его дочерние теги.

Вышеприведенная функция возвращает XPathResult и вам придется перебирать его, чтобы делать с ним все, что вы захотите. Вы можете повторить его снова, чтобы вернуть все дочерние узлы или просто текст. Перебор набора результатов и извлечение данных должны быть рекурсивными, но я просто создал простой пример, чтобы получить представление.

Пример jsFiddle

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