使用javascript正则表达式,从网页获取元标记数据

时间:2013-12-19 09:17:05

标签: javascript jquery regex tags meta

我想使用javascript(jquery)和regex获取元标记数据。

以下是一些元标记。

<meta name="description" content="Amazon.com : Google Chromecast HDMI Streaming Media Player : Streaming Media Clients : Electronics" />
<meta name="title" content="Amazon.com : Google Chromecast HDMI Streaming Media Player : Streaming Media Clients : Electronics" />

我可以使用以下功能从这些表单中获取内容。

function getProductInfo(attr) {
    var m = $("meta[name="+attr+"]");
    var content = m.attr("content");
    return content; 
}
if(!title) var title = getProductInfo('title');

然而,有时会有不同形式的元标记,如

<meta property="title" content="....">
<meta property="og:title" content="....">
<meta name="title" description="....">

这就是我考虑使用正则表达式的原因。但我不知道。 请给我一个提示。感谢。

5 个答案:

答案 0 :(得分:1)

$('meta').each(function() {
        console.log($(this).attr('content'));
    });

对于未排序的标签,不需要正则表达式。

function getProductInfo(attr) {
            $('meta').each(function(index,tag) {
                if($(tag)[0].attributes[0].textContent == attr) { 
                        console.log($(tag)[0].attributes[0].textContent, $(tag)[0].attributes[1].textContent);
                     }
            });
        }
        getProductInfo('title');

这将为您提供任何名称/属性都具有标题的内容。

答案 1 :(得分:1)

以下是not using RegEx

的执行方式

没有图书馆,纯粹的香草JS:

var meta = document.querySelectorAll('meta');
for(var i=0;i<meta.length;i++){
   var content = meta[i].getAttribute('content'); /* here's the content */
}

<强> http://jsfiddle.net/JA9Yq/

jQuery的:

$('meta').each(function(index,tag){
    var content = tag.getAttribute('content');
});

<强> http://jsfiddle.net/duL6E/

答案 2 :(得分:1)

也可以使用RegEx:

<meta[^>]+content="([^")]*)"

结果:

$matches Array:
(
    [0] => Array
    (
        [0] => <meta name="description" content="Amazon.com : Google Chromecast HDMI Streaming Media Player : Streaming Media Clients : Electronics"
        [1] => <meta name="title" content="Amazon.com : Google Chromecast HDMI Streaming Media Player : Streaming Media Clients : Electronics"
    )

    [1] => Array
    (
        [0] => Amazon.com : Google Chromecast HDMI Streaming Media Player : Streaming Media Clients : Electronics
        [1] => Amazon.com : Google Chromecast HDMI Streaming Media Player : Streaming Media Clients : Electronics
    )
)

答案 3 :(得分:0)

可能是这个......

var desc = $('meta[name=description]').attr("content");
var title= $('meta[name=title]').attr("content");

var desc = $('meta[property=description]').attr("content");
var title= $("meta[property='og:title]").attr("content");

注意:显然它不喜欢冒号。我能够通过使用这样的双引号和单引号来修复它:

答案 4 :(得分:0)

这应该适用于我认为的所有元标记......

    /\<meta.*?\>/

这是一个指向regexr的链接,这是一个很好的尝试工具

http://gskinner.com/RegExr

但最好使用@subZero建议而不是使用正则表达式,如果你不需要......我想。