使用正则表达式,选择带有条件的整个<p> .... </p>

时间:2019-01-27 12:20:25

标签: html regex

使用正则表达式,如何选择整个<p>....</p>,其中某个文本(例如“ hello world”)位于<p>....</p>内。您的帮助请求。

1 个答案:

答案 0 :(得分:-1)

此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>

  

这里是good online tool,用于测试您的正则表达式。

希望有帮助!