[英]Regex. Find paragraph containing some word
In text like this: 在这样的文字:
<p>1 bla bla <em>bla</em> bla bla</p><p>2 bla bla <em>bla</em> bla TEXT bla</p><p>3 bla bla <em>bla</em> bla bla</p><p>4 bla bla <em>bla</em> bla TEXT bla</p><p>5 bla bla <em>bla</em> bla bla</p>
I have to find paragraphs (between p
tags) that contain string "TEXT". 我必须找到包含字符串“TEXT”的段落(在
p
标签之间)。
I tried <p>.*?(TEXT).*?<\\/p>
我试过
<p>.*?(TEXT).*?<\\/p>
and I tried <p>(?!<p>).*?(TEXT).*?<\\/p>
我试过
<p>(?!<p>).*?(TEXT).*?<\\/p>
But it doesnt solve the problem. 但它并没有解决问题。
((?!<\\/p>).)*(TEXT)
to make sure 'Text' in one <p></p>
((?!<\\/p>).)*(TEXT)
确保一个<p></p>
'文字'
var regex = /<p>((?!<\\/p>).)*?(TEXT).*?<\\/p>/g; var text = '<p>1 bla bla <em>bla</em> bla bla</p><p>2 bla bla <em>bla</em> bla TEXT bla</p><p>3 bla bla <em>bla</em> bla bla</p><p>4 bla bla <em>bla</em> bla TEXT bla</p><p>5 bla bla <em>bla</em> bla bla</p>'; console.log(text.match(regex));
The first one you wrote works for me when i try it in sublime text's search bar with regex activated. 当我在sublime文本的搜索栏中尝试激活正则表达式时,你写的第一个对我有用。
<p>.*?(TEXT).*?<\/p>
You just need to add start and end delimiter like (...) or {...} or /.../ or [...] So try it like this: 你只需要添加开始和结束分隔符,如(...)或{...}或/.../或[...]所以尝试这样:
/<p>.*?(TEXT).*?<\/p>/
I think without delimiters its just a pattern and with them it's a regular expression in javascript... Add "i" after it for case insensitive search 我认为没有分隔符它只是一个模式和它们在javascript中的正则表达式...在它之后添加“i”以进行不区分大小写的搜索
/<p>.*?(TEXT).*?<\/p>/i
Since it is a string, (said by @Rajesh), just create a div
element and appent to it. 因为它是一个字符串,(由@Rajesh说),只需创建一个
div
元素并添加它。
get All the p
tags using querySelectorAll
and then use forEach
function. 使用
querySelectorAll
获取所有p
标记,然后使用forEach
函数。
Check the innerHTML
for /TEXT/
and if found, push it into array. 检查
/TEXT/
的innerHTML
,如果找到,将其推入数组。
In the below program, the array a
contains the 2 matching tags 在下面的程序中,数组
a
包含2个匹配的标记
var str="<p>1 bla bla <em>bla</em> bla bla</p><p>2 bla bla <em>bla</em> bla TEXT bla</p><p>3 bla bla <em>bla</em> bla bla</p><p>4 bla bla <em>bla</em> bla TEXT bla</p><p>5 bla bla <em>bla</em> bla bla</p>"; var div=document.createElement("div"); div.innerHTML=str; var a=[]; div.querySelectorAll("p").forEach(x=>{if(/TEXT/.test(x.innerHTML)) a.push(x);}); console.log(a);
If you don't want the <p></p>
tags, just push the textContent
如果您不想要
<p></p>
标签,只需按下textContent
var str="<p>1 bla bla <em>bla</em> bla bla</p><p>2 bla bla <em>bla</em> bla TEXT bla</p><p>3 bla bla <em>bla</em> bla bla</p><p>4 bla bla <em>bla</em> bla TEXT bla</p><p>5 bla bla <em>bla</em> bla bla</p>"; var div=document.createElement("div"); div.innerHTML=str; var a=[]; div.querySelectorAll("p").forEach(x=>{if(/TEXT/.test(x.innerHTML)) a.push(x.textContent);}); console.log(a);
You can try something like this: 你可以尝试这样的事情:
var str = "<p>1 bla bla <em>bla</em> bla bla</p><p>2 bla bla <em>bla</em> bla TEXT bla</p><p>3 bla bla <em>bla</em> bla bla</p><p>4 bla bla <em>bla</em> bla TEXT bla</p><p>5 bla bla <em>bla</em> bla bla</p>"; var groupRegex = /(?:^|<p>)(.*?)(?:<\\/p>|$)/g; var searchRegex = /text/i var groups = str.match(groupRegex); var result = groups.filter(function(s){ return searchRegex.test(s) }) console.log(result)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.