正则表达式。找到包含一些单词的段落

时间:2017-03-31 07:01:10

标签: javascript regex

在这样的文字中:

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

我必须找到包含字符串“TEXT”的段落(p标签之间) 我tried <p>.*?(TEXT).*?<\/p>
tried <p>(?!<p>).*?(TEXT).*?<\/p>

但它没有解决问题。

4 个答案:

答案 0 :(得分:3)

((?!<\/p>).)*(TEXT)确保一个<p></p>

中的“文字”

See demo

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));

答案 1 :(得分:1)

当我在崇高文本的搜索栏中尝试激活正则表达式时,你写的第一个对我有用。

<p>.*?(TEXT).*?<\/p> 

你只需要添加开始和结束分隔符,如(...)或{...}或/.../或[...]所以试试这样:

/<p>.*?(TEXT).*?<\/p>/ 

我认为没有分隔符只是一种模式,并且在它们中它是javascript中的正则表达式... 添加&#34;我&#34;之后用于不区分大小写的搜索

/<p>.*?(TEXT).*?<\/p>/i

答案 2 :(得分:0)

因为它是一个字符串,(由@Rajesh说),只需创建一个div元素并将其添加到其中。

使用p获取所有querySelectorAll代码,然后使用forEach功能。

检查innerHTML /TEXT/,如果找到,请将其推入阵列。

在下面的程序中,数组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);

如果您不想使用<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);

答案 3 :(得分:-1)

您可以尝试这样的事情:

  • 创建一个正则表达式以获取所有组
  • 遍历这些正则表达式以检查必要的搜索关键字并过滤掉匹配项。

&#13;
&#13;
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)
&#13;
&#13;
&#13;