正则表达式只在特定字符串之间选择字符串,无法包含

时间:2015-06-17 12:29:47

标签: regex html-parsing

有人可以提供帮助 - 需要一个正则表达式,它将选择仅在STRINGA和STRINGB之间发生的任何和所有STRING,而不管换行符。我试过研究这个没有成功。其他“两个字符串之间”的查询对此没有帮助。

具体来说,我只需要在h3标签之间选择ONLY标签(包括lt gt符号)。

<p>  asdf <strong> ghkjk 
   <strong> qwer </p>
<h3> asdf **<strong>** gh
   kjk **<strong>** qwer </h3>

我可以选择只有所有标签;我可以让它选择&lt; h3&gt;的完整序列。和&lt; / h3&gt;标签。但我看不出如何结合这两个条件。 (顺便说一句,regexr.com是一个很棒的工具!) 感谢。

2 个答案:

答案 0 :(得分:0)

当涉及到正则表达式时,HTML并不容易使用,并且在特定(和罕见)情况下几乎总是会失败。但是,在大多数情况下,从标签中提取信息是可能的。从表中提取信息(然后可以在其中包含另一个表)是正则表达式开始崩溃的地方。

我想出了(?<=\<[hH]3\>)(.|\s)*?(?=\<\/[hH]3\>),它解决了简单的情况(<h3>info</h3>

https://regex101.com/r/qK6uT4/1

请注意,由于积极的外观,这在javascript中不会起作用。我们的想法是检查之前是否有h3标签,以及lookarounds之后的/ h3标签。

(.|\s)*?表示任何符号和包含换行符的任何空格都会出现最短的次数(因此您不会在一个<h3>标记和另一个</h3>之间得到符号。

要处理<h3 class="someclass">等情况,如果它们相关,则之前的正则表达式失败。

(?:\<[hH]3(?:\s.*?)?\>)((.|\s)*?)(?=\<\/[hH]3\>)

可以使用,捕获组($ 1)就是你的结果。

https://regex101.com/r/qK6uT4/3

答案 1 :(得分:0)

regex用于检测平板电脑是否随附4G / 3G / LTE

var txt1 = document.querySelector('.product-title').textContent.trim();
var ans;   

if(txt1.match(/\b4G\b/gi) || txt1.match(/\bLTE\b/gi) || txt1.match(/\b3G\b/gi) ||txt1.match(/ Cellular/gi)||txt1.match(/ Cell /gi) || txt1.match(/ 4G /g)  || txt1.match(/ LTE /g) || txt1.match(/ 3G /g) || txt1.match(/\b4G\b,/g)|| txt1.match(/\b3G\b,/g))  
{
ans= '1';
} 
else 
{
ans= '0';
}