使用正则表达式,如何选择整个<p>....</p>
,其中某个文本(例如“ hello world”)位于<p>....</p>
内。您的帮助请求。
答案 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,用于测试您的正则表达式。
希望有帮助!