2012-01-31 5 views
0

DOMstringオブジェクト、XMLHttpRequestを使用してサーバーから取得するいくつかのWebページのテキストがあります。私はそれからいくつかの特定のタグの間にある部分文字列をカットする必要があります。これを行う簡単な方法はありますか?そのようなメソッドは、私の場合は動作しません、私の場合は、Webページの内容が動的なので、私は部分文字列の先頭と末尾を指定することはできません(私はそれが<tag></tag>)。もしあれば、それは、トリックDOMstringパーサー

答えて

1

DOMStringはほとんどの(すべての)JavaScriptブラウザ環境の文字列として実装されているため、正規表現、DOMParser、jQueryなどのライブラリで提供されるHTMLパーサーなど、任意の解析手法を使用できます。例:

もちろん、これはひどい考えです。あなたが本当にjQueryを使って、例えば、DOMパーサを使用する必要があります。

$('tag', htmlString).html(); 

jQueryの例の上に明確にし、[編集]、それは以下のようなものを行うための同等です:

function extractText2(tagName, htmlString) { 
    var div = document.createElement('div'); // Build a DOM element. 
    div.innerHTML = htmlString; // Set its contents to the HTML string. 
    var el = div.getElementsByTagName(tagName) // Find the target tag. 
    return (el.length > 0) ? el[0].textContent : null; // Return its contents. 
} 
extractText2('tag', '<tag>Foo</tag>'); // => "Foo" 
extractText2('x', '<x><y>Bar</y></x>'); // => "Bar" 
extractText2('y', '<x><y>Bar</y></x>'); // => "Bar" 

このソリューションは、正規表現ソリューションが失敗するHTML構文のニュアンスを処理するため、正規表現ソリューションより優れています。もちろん、クロスブラウザーのテストが必要なので、jQuery(またはPrototype、ExtJSなど)のようなライブラリへの推奨が必要です。

+0

ありがとうございました、あなたと他のアドバイスが動作します。しかし、それはいくつかの種類の "ハック"のようにいくつかの単語に応じて文字列をカットするようだ。一般に、ページのコンテンツは変更され、コードは機能しません。 htmlページをf.e.、xml-documentとして受け取る方法はありますか?それから、必要な要素を取りますか? –

+0

これは '$( 'tag'、domString).html();'でやっていることです。暗黙的にDOM要素に変換された文字列 'domString'のタグ要素の内容を取得します。 jQuery $(aXMLString)はdom要素を返します。 (私はそれが作成された要素内のinnerHTMLとwritedと考え、element.getChildren()を介して返されます) – dievardump

0

囲むタグと仮定すると、文字列内で一意である...

domString.match(/.*<tag>(.*)<\/tag>.*/)[0] 

または

/.*<tag>(.*)<\/tag>.*/.exec(domString)[0] 

らしいですテキストのみがあり、タグは再表示されます。

"<tag>asd</tag>".match(/<tag>[^<]+<\/tag>/); 
+1

Regex.match(string)ではなくString.match(Regex)ですか? – dievardump

+0

Opps、はい、javascriptの素敵な折衷的な機能の1つは、テストが式にありますが、一致は文字列にあります:)。今修正する編集 – Gus

0

として@Gusを行うが、改善されなければならないよう

+0

改善されていません。これは機能しません。あなたの文字列が ""のタグの中に ""の文字列であれば、 "g"が得られます。見つからない*を式に追加すると、/ [^ <]*/'タグ内に" tag> string "という文字列があるため、まだ動作しません。私はそれを考えると私は正規表現を書くので、私は "何か、タグ、何かが何かをエンドタグ"と思った。私は確かにほとんどの正規表現エンジンは、しかし、とにかくこれらをオフlopを確認します。 – Gus

+0

編集者がそれを壊したと私は気付かなかった: - /、この更新版はどうですか? – Davsket

+0

コンテンツにタグが含まれていない場合にのみ機能します。また、データが含まれていない場合は、まったく一致しないので、逆参照しようとするとエラーが発生する可能性があります。 – Gus

2
​​

これは、周囲のタグの名前が分かっていれば、これでうまくいくはずです。