2009-09-13 7 views
0

Salut, j'espérais que quelqu'un puisse m'aider avec cette regex.regex pour obtenir des méta-mots-clés

Je veux correspondre à la Patern ci-dessous une fois pour extraire les mots-clés meta d'une page:

.match(/(<meta name=[\"|\']keywords([^\/>]*))/ig); 

Toutes les idées seront les bienvenus

Répondre

4

Pourquoi ne pouvez-vous utiliser un analyseur DOM, puis extraire simplement tous les éléments méta et parcourir et faire ce que vous voulez?

+0

Je n'ai aucune expérience de l'utilisation des objets dom ... comment en extraire les méta-mots-clés? –

+2

+1. L'écriture de votre propre expression régulière est sujette à des erreurs et peut être très difficile à déboguer. Aucune raison de le faire quand il y a des parseurs gratuits partout. – Fragsworth

+2

Recherchez d'abord un analyseur DOM, puis chargez le document, la méthode getElementsByTagName est ce que vous recherchez et vous pouvez utiliser getAttribute après avoir parcouru la liste des éléments meta. –

0

Je n'ai pas de réponse précise, mais est-ce utile? C'est ce que j'utilise dans TextPad trouver et remplacer.

^<meta[^"]+"\([^"]*\)"[^"]*"\([^"]*\)"*.*

FIND: 
^[^"]+"\([^"]*\)"[^"]*"\([^"]*\)"*.* 
REPLACE: 
<\1>\2</\1> 

CHANGES: 
<TITLE>Q10022</TITLE> 
<META HTTP-EQUIV="CONTENT-Type" CONTENT="text/html; charset=iso-8859-1" /> 

TO: 
<TITLE>Q10022</TITLE> 
<CONTENT-Type>text/html; charset=iso-8859-1</CONTENT-Type> 
0
<meta name="keywords" content="(.+)" /> 

Je peux me tromper, mais si elle est non-gourmand qui devrait l'être. juste échapper aux caractères spéciaux.

-1

Ce n'est pas testé mais avec jquery ne pouvait pas vous faire juste:

$('meta').each(function() { // insert code here to put the attributes in an array or whatever }); 

puis à l'intérieur il soit stocker les données, faire des appels ajax ou des actions basées sur les données contenues dans chacune des balises meta .

0

<meta(?=[^>]*name\s*=\s*("|')\s*keywords\s*\1)\s+[^>]*content\s*=\s*("|')([^>\2]*?)\2

vous permettra de récupérer le contenu des mots-clés meta comme troisième groupe (\ 3) une manière plus robuste:
- le contenu et le nom peuvent tous deux être exprimée entre "ou"
- attributes ordre n'est pas fixé
- autres attributes peuvent être présents

être juste pour échapper correctement carefull la "ou « dans la chaîne regex pour satisfaire vos exigences linguistiques préférées (en Python, vous feriez mieux d'utiliser le triple »)

Espérons que cela puisse aider!