下のような形式の悪い HTML があり、特定の正規表現に一致するテキストを持つリーフ ノードを (それ以上の子なしで) 取得したいと考えています。
<html>
<head>
<title>co20140725-ex99_1.htm</title>
</head>
<body bgcolor="#ffffff" style="DISPLAY: inline; FONT-FAMILY: Times New Roman; FONT-SIZE: 10pt">
<div>
<div style="TEXT-ALIGN: left"> </div>
<div style="TEXT-ALIGN: right">EXHIBIT 99.1</div>
<div style="TEXT-ALIGN: left"> </div>
<div style="TEXT-ALIGN: left">
<div style="TEXT-INDENT: 0pt; DISPLAY: block; MARGIN-LEFT: 0pt; MARGIN-RIGHT: 0pt" align="left">
<div style="TEXT-ALIGN: center"><font style="FONT-WEIGHT: bold">ANNOUNCES</font></div>
</html>
私は、基本的にjQueryトラバーサルAPIを実装するcheerioを使用しています。私がこれまでに試したこと:
:contains
セレクターは正規表現をサポートしておらず、大文字と小文字を区別しないテキストもサポートしていません。var text = $('body').filter(':contains("ANNOUNCES")');
each
、次に標準の JavaScriptmatch
:$('body').each(function (i, elem) { if ($(this).text().match(/announces/i)) { var text = $(this).text(); } }
children
ですが、HTML 内のすべてのテキストである 1 つの文字列を出力します。$('p, b, div, font').children(':contains("string I\'m looking for but this isn\'t case-sensitive like match is")').children().first().text();
問題は、ネストされた子の数が可変であり、何らかの理由ですべての要素を取得するという事実にあると思いますが、それぞれにたくさんの子があり、それらを反復処理することはできませんでしたテキストをテストします。
可変的にネストされた要素がたくさんあることがわかります。通常.find()
は、 内のすべての要素を検索するのに機能します<body>
が、この場合はまったく機能しません.find()
。.filter()
この HTML のテキストを正規表現検索する方法について何か考えはありますか?
HTML の完全な例は、ここにあります。