2017-01-29 3 views
1

Ein Google-Apps-Skript erhält HTTP-Response-Inhaltstext. Der Auszug wie folgt.Javascript regex zum Extrahieren von Titel und iframe

<p style="text-align: left;"><span style="background-color: rgb(242, 195, 20);"><span style="color: rgb(192, 80, 77);">Disclaimer:</span></span><span style="background-color: rgb(255, 255, 255);">Please note,</span><a href="http://www.g00gl3.com"><span style="background-color: rgb(255, 255, 255);">http://www.g00gl3.com</span></a><span style="background-color: rgb(255, 255, 255);"> or </span><a href="http://www.g00gl3.com"><span style="background-color: rgb(255, 255, 255);">www.G00gl3.com</span></a><span style="background-color: rgb(255, 255, 255);"> is only video embedding websites. All of the videos found here come from 3rd party video hosting sites. We do not host any of the videos. Please contact to appropriate video hosting site for any video removal.</span></p> 
<div style="text-align: center;"><strong><span style="background-color: rgb(255, 255, 255);">Dailymotion <br><br></span></strong></div> 
<div style="text-align: center;"><iframe src="http://www.dailymotion.com/embed/video/foo1234567890bar? syndication=202279" width="640" height="360" frameborder="0"></iframe></div> 
<div style="text-align: center;"><strong><span style="background-color: rgb(255, 255, 255);">Alternate Video <br><br></span></strong></div> 
<div style="text-align: center;"><iframe src="http://hqq.tv/player/embed_player.php?vid=1234567890&amp;autoplay=no" width="720" height="450" frameborder="0"></iframe></div> 

Aus diesem Auszug müssen Titel (Dailymotion oder Alternate Video) und iframe extrahiert werden.

Nur iframe ist bereits abgestimmt.

/<iframe(.*)\/iframe>/g 

Nun ist die erwartete ist

Dailymotion <br><br></span></strong></div> 
<div style="text-align: center;"><iframe src="http://www.dailymotion.com/embed/video/foo1234567890bar? syndication=202279" width="640" height="360" frameborder="0"></iframe> 

und

Alternate Video <br><br></span></strong></div> 
<div style="text-align: center;"><iframe src="http://hqq.tv/player/embed_player.php?vid=1234567890&amp;autoplay=no" width="720" height="450" frameborder="0"></iframe> 

Kann jemand Hilfe regex schreiben nur oben zu holen.

+2

Vielleicht könnten Sie einen DOM-Parser anstelle einer Regex verwenden. Regex verarbeitet verschachtelte XML nicht gut. –

+0

Danke @TimBiegeleisen für die Antwort. Sie müssen prüfen, ob Google Apps Script über einen DOM-Parser verfügt. – Hsehdar

Antwort

1

die Sie interessieren, sollte funktionieren:

/255\);">([a-zA-Z]+\s+.*)<br><br>/g 
+0

Danke @ l-lvadim für die Antwort. Dies entsprach sehr den Erwartungen. – Hsehdar

0

Sie nur für die beiden Titel suchen müssen Angenommen, dies wird alle Daten extrahieren Sie brauchen:

[\s\S]*(Dailymotion|Alternate Video)[\s\S]*(<iframe[\s\S]*<\/iframe>) 

Here's eine Seite, wo man es funktioniert sehen:

+0

Danke @Kesty für die Antwort. Die Annahmen konnten nicht getroffen werden, wie auch andere Titel. – Hsehdar

0

Die erste Antwort funktioniert, aber ich denke, es ist nicht sehr restriktiv. Diese Regex [\s\S]*(Dailymotion|Alternate Video)[\s\S]*(<iframe[\s\S]*<\/iframe>) funktioniert für Ihre Beispiele, aber wenn der HTML-Code falsch ist, passen die Regex (Sie können es testen).

Ich habe 2 Regex stärker gemacht, die unbequem ist, dass die Regex so lang ist. Der erste Teil meiner regex ist diese Linie entsprechen:

<div style="text-align: center;"><strong><span style="background-color: rgb(255, 255, 255);">Dailymotion <br><br></span></strong></div>

Regex:

^(\<((\D+)([a-z]*=\"[\S]*|[ ]\.{0,1}[\S]*\")*)\>).*(Dailymotion|Alternate Video).*\<\/\3\>|(\<\D+\/\>)$

https://regex101.com/r/XthACq/1

Die Capture-Gruppe überprüfen, ob die HTML "gültig" ist. Zum Beispiel können Sie nicht geschlossen haben. Wenn die erste Zeile Ihres HTML-Codes übereinstimmt, können Sie den zweiten Regex verwenden, um das zu überprüfen.

<div style="text-align: center;"><iframe src="http://www.dailymotion.com/embed/video/foo1234567890bar? syndication=202279" width="640" height="360" frameborder="0"></iframe></div>

Ist Spiel dieses regex:

^(\<((\D+)([a-z]*=\"[\S]*|[ ]\.{0,1}[\S]*\")*)\>).*<(iframe)([a-z]*=\"[\S]*|[ ]\.{0,1}[\S]*\")+\><\/\5>\<\/\3\>|(\<\D+\/\>)$

https://regex101.com/r/wBBOi5/1

Wie bei dem ersten regulären Ausdruck, der HTML-Code ist zu überprüfen. Jetzt können Sie den Titel, den Link, alle Attribute extrahieren, indem Sie die Capture-Gruppe verwenden.

+0

Danke @Mattasse für die Antwort. Ich habe vielleicht diesen Regex geändert und versuche es noch einmal. – Hsehdar

0

@ l-vadim Antwort war die nächste und ich benutze es.

/255\);">([a-zA-Z]+\s+.*)<br><br>/g 
Verwandte Themen