8

嘿,我正在使用 ajax 将 html 页面加载到字符串中,现在我想找到页面的标题并使用它。

现在我确实设法获得了<title>使用正则表达式,但是它返回了标签以及标题本身,我希望从字符串中提取它,或者有没有办法在正则表达式中做到这一点?

这是我的代码:

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

现在我如何在 this/ 而不是 this 之后获得实际标题?

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

使 reg exp 不区分大小写。这是完整的代码:

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 回答
0

试试这个,我认为这会有所帮助。它在我的情况下非常有效。:)

 var FindTag=(data='',tag='')=>{
    var div=document.createElement('div');
    div.innerHTML=data;
    data=$(div).find(tag)[0].outerHTML;
    return data;
 }

var data=FindTag(data,"title");
于 2020-01-02T04:28:51.303 回答
0

正则表达式不是在 HTML 中查找内容的好方法,这对于简单的一次性正则表达式来说太复杂了。(请参阅有关此主题的著名帖子。)相反,使用DOMParser'sparseFromString然后查看生成的文档:

const html = "<!doctype html><head><title>example</title>";

const parser = new DOMParser();
const doc = parser.parseFromString(html, "text/html");
const title = doc.querySelector("title");
console.log(title.textContent);

于 2021-07-26T17:42:12.280 回答