2012-11-19 12 views
5

ちょっと、私は文字列にajaxを使ってhtmlページをロードしています。今、私はそのページのタイトルを見つけて使いたいと思っています。HTMLの文字列でタイトルタグを取得する方法は?

正規表現を使用して<title>を取得することができましたが、タグ自体がタイトルとともに返され、その文字列からその文字列を抽出したい場合や正規表現でその方法を行うことができますか?

これは私のコードです:

var title = result.match(/<title[^>]*>([^<]+)<\/title>/); 

今、私はこの後に/これに代えてactuallタイトルを得るのですか?

+0

jqueryを使用してタイトルタグを選択してください... regexは使用しないでください。 – nhahtdh

+0

文書内にない文字列の中にあります –

+1

私はそれを認識していますが、HTML文字列を解析してそれを処理するソリューションを見ています。編集:見つかったhttp://stackoverflow.com/questions/704679/parse-html-string-with-jquery – nhahtdh

答えて

9

がそうのようにjQueryオブジェクトにあなたの応答のHTML文字列をロードし、テキストを取得する

$(response).find("title").text(); 
+0

ドキュメントはajaxリクエストに対する応答です。したがって、ドキュメントによってアクセスできない可能性があります。 – devsathish

+0

良い点。私はそれを私の答えから取り除いた。 – Bruno

+1

これは私にとっては何らかの理由で直接動作しませんでした(jQuery 1.9.1)、私はdivに応答を入れてjQueryオブジェクトにロードしなければなりませんでした: 'var div = document.createElement( 'div'); div.innerHTML =レスポンス。 $(div).find( 'title')。text(); ' –

9

.match()マッチの戻り値Array、括弧内の値を取得するために

var title = result.match(/<title[^>]*>([^<]+)<\/title>/)[1]; 

を使用

+0

イバンさん、ありがとうございました。しかし、タイトルタグを取得するいくつかの良い方法はありますか? –

+0

htmlを文字列として扱う場合、 '/ (。*?)/i' regexpを使用できます。 jqueryを使用する場合は、ドキュメントフラグメントを作成し、その値を '$(yourHtmlString).find( 'title')から取り出すことができます。text()' –

2

CODE:

var title = result.match("<title>(.*?)</title>")[1]; 
0

大文字と小文字を区別しないでください。

var regex = /<title>(.*?)<\/title>/gi; 
var input = "<html><head><title>Hello World</title></head>...</html>"; 
if(regex.test(input)) { 
    var matches = input.match(regex); 
    for(var match in matches) { 
    alert(matches[match]); 
    } 
} else { 
    alert("No matches found!"); 
} 
2

比較的単純なプレーンのJavaScript、および非正規表現、アプローチ:

var htmlString = '<head><title>Some title</title></head><body><p>Some text, in a paragraph!</p></body>', 
    html = document.createElement('html'), 
    frag = document.createDocumentFragment(); 
html.innerHTML = htmlString; 
frag.appendChild(html); 

var titleText = frag.firstChild.getElementsByTagName('title')[0].textContent || frag.firstChild.getElementsByTagName('title')[0].innerText; 

console.log(titleText);​ 

JS Fiddle demo はここで完全なコードです。

私は明らかに、あなたのHTML文字列を推測して、コンテンツの周りから<html>/</html>タグを取り除いていました(明らかに存在する)。しかし、たとえそれらのタグが文字列内にあっても、それはまだ動作します:JS Fiddle demo

そして、もう少し機能的なアプローチ:

function textFromHTMLString(html, target) { 
    if (!html || !target) { 
     return false; 
    } 
    else { 
     var fragment = document.createDocumentFragment(), 
      container = document.createElement('div'); 
     container.innerHTML = html; 
     fragment.appendChild(container); 
     var targets = fragment.firstChild.getElementsByTagName(target), 
      result = []; 

     for (var i = 0, len = targets.length; i<len; i++) { 
      result.push(targets[i].textContent || targets[i].innerText); 
     } 
     return result;   
    } 
} 

var htmlString = '<html><head><title>Some title</title></head><body><p>Some text, in a paragraph!</p></body></html>'; 

var titleText = textFromHTMLString(htmlString, 'title'); 

console.log(titleText);​ 

JS Fiddle demo

+0

驚くべき答え、正規表現はありません!私は部分文字列と長さで頭を叩いて、html文字列から第1、第2、第3の 'img'タグを抽出しようとしました。これは今とても簡単です! – denikov

関連する問題