2013-12-19 5 views
0

Я хочу получать метатеги данных с помощью javascript (jquery) и регулярного выражения.с использованием javascript 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="...."> 

Вот почему я рассматриваю с помощью регулярных выражений. но я понятия не имею. , пожалуйста, дайте мне совет. Благодарю.

+0

с использованием на стороне клиента языка действительно позволяют Вам только получить метаданные вашего собственного сайта или сайтов Wich имеет «Access-Control-Allow -Origin: *». вам нужны php/asp или yql для получения метаданных с удаленных сайтов. – cocco

ответ

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"); 

Примечание: Очевидно, это не нравится двоеточие. Мне удалось исправить это, используя двойные и одинарные котировки:

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

Вот как вы делаете это с помощью 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/

+1

Он хочет получить конкретное имя/свойство, например, 'title' – Holybreath

0

Это должно работать на всех мета-теги, я думаю ...

/\<meta.*?\>/ 

Вот ссылка на RegExr, который является хорошим инструментом, чтобы попробовать вещи

http://gskinner.com/RegExr

Но лучше использовать совет @subZero и не использовать регулярное выражение, если вам не нужно ... Я думаю.

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 
    ) 
) 
+0

спасибо, это было началом для решения, которое мне было необходимо.Мне также нужно было включить прямоугольную скобку: ] + content = "([^")] *). *?> – jessieloo

Смежные вопросы