8

こんにちは、ajax を使用して html ページを文字列に読み込んでいます。ページのタイトルを見つけて使用したいと思います。

今、なんとか<title>正規表現を使用して取得できましたが、それはタイトル自体と一緒にタグを返し、文字列からそれを抽出したいのですか、それとも正規表現でそれを行う方法はありますか?

これは私のコードです:

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

この/の代わりにこの後に実際のタイトルを取得するにはどうすればよいですか?

4

7 に答える 7

17

.match()一致の配列を返し、使用

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

括弧内の値を取得する

于 2012-11-19T11:32:31.803 に答える
13

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

$(response).find("title").text();
于 2012-11-19T11:36:28.917 に答える
4

比較的単純なプレーンな 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 フィドルのデモ

明らかに、私はあなたの 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 フィドルのデモ

于 2012-11-19T11:45:08.243 に答える
3

コード:

var title = result.match("<title>(.*?)</title>")[1];
于 2012-11-19T11:36:18.303 に答える
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!");
}
于 2012-11-19T11:37:25.557 に答える