Это регулярное выражение JS сработает, используя группу для захвата содержимого абзаца и положительный прогноз, чтобы соответствовать до первого </p>
, не съедая другие:
/<p>\s*([\w\s]*hello world[\w\s]*)\s*(?=<\/p>)/gm
Если вы хотите захватить <p>
теги тоже:
/(<p>\s*[\w\s]*hello world[\w\s]*\s*(?=<\/p>)<\/p>)/gm
А если у ваших <p>
тегов могут быть классы или пробелы:
/(<\s*p[^>]*?>\s*[\w\s]*hello world[\w\s]*\s*(?=<\s*\/p\s*>)<\s*\/p\s*>)/gm
Вот пример захвата целых <p>
тегов:
const html = document.getElementById('demo').innerHTML;
const regex = new RegExp(/(<\s*p[^>]*?>\s*[\w\s]*hello world[\w\s]*\s*(?=<\s*\/p\s*>)<\s*\/p\s*>)/gm);
let match = regex.exec(html);
console.log('Matches:');
while (match != null) {
console.log(match[1])
match = regex.exec(html);
}
<div id="demo">
<p class="p1">bla bla hello world bla</p>
<p >hello world</p>
<p>Paragraph not matching</p>
</div>
Вот хороший онлайн-инструмент для проверки ваших регулярных выражений.
Надеюсь, чтопомогает!