在这样的文本中:<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
标签之间)。
I tried<p>.*?(TEXT).*?<\/p>
和I tried<p>(?!<p>).*?(TEXT).*?<\/p>
但这并不能解决问题。
4条答案
按热度按时间x9ybnkn61#
((?!<\/p>).)*(TEXT)
确保一个<p></p>
中的“文本”See demo
5n0oy7gb2#
由于它是一个字符串,(@Rajesh说),只需创建一个
div
元素并appent到它。使用
querySelectorAll
获取所有p
标记,然后使用forEach
函数。检查
innerHTML
中的/TEXT/
,如果找到,将其推入阵列。在下面的程序中,数组
a
包含2个匹配的标记如果不需要
<p></p>
标记,只需按textContent
ct3nt3jp3#
有时你只需要添加一个分隔符,比如(...)或{...}或/.../或[...],所以像这样尝试:
但正如Barman所指出的,这并不总是停留在一个段落内。如果你真的只想选择一个段落,你需要这样的东西:
(?:<p |<p>)
以<p
或<p>
开头,并且开头的?:
表示“在输出中不捕获此内容”(?:(?!\/p>).|\n)*
任何字符或换行符.|\n
,除了结尾的/p>
和开头的?:
表示“在输出中不捕获此内容”(TEXT)
当然是TEXT这个词.*?
任何带有惰性量词“?”的字符.*?
在最短匹配时停止(在我们有</p>
之前<\/p>
并且必须以关闭</p>
标记结束这一个也允许多行文本!
s6fujrry4#
你可以试试这样的方法: