2016-05-04 5 views
1

HTML文字列は次のとおりです。は、HTML文字列からのビデオタグを取り付け

"<div>\r\n<video controls=\"controls\" height=\"313\" id=\"video201643154436\" poster=\"/uploads/ckeditor/pictures/18/content_56883622_18f242e114.jpg\" width=\"500\"><source src=\"/uploads/ckeditor/attachments/23/newtons_law.mp4\" type=\"video/mp4\" />Your browser doesn&#39;t support video.<br />\r\nPlease download the file: <a href=\"/uploads/ckeditor/attachments/23/newtons_law.mp4\">video/mp4</a></video>\r\n</div>\r\n\r\n<div>test description</div>\r\n\r\n<div>\r\n<div>\r\n<video controls=\"controls\" height=\"300\" id=\"video201644152011\" poster=\"\" width=\"400\"><source src=\"/uploads/ckeditor/attachments/24/test.mp4\" type=\"video/mp4\" />Your browser doesn&#39;t support video.<br />\r\nPlease download the file: <a href=\"/uploads/ckeditor/attachments/24/test.mp4\">video/mp4</a></video>\r\n</div>\r\n\r\n<p>&nbsp;</p>\r\n</div>\r\n" 

私は[[ Video ]]

期待される出力との内容とサブタグを含むすべてのビデオタグを置換するには、次のとおりです。

"<div>\r\n[[ Video ]]\r\n</div>\r\n\r\n<div>test description</div>\r\n\r\n<div>\r\n<div>\r\n[[ Video ]]\r\n</div>\r\n\r\n<p>&nbsp;</p>\r\n</div>\r\n" 

正規表現/<video\s(.*?)<\/video(?=[>])>/を使用しようとしましたが、正しく動作しません。

答えて

1

私はこのタグ内にあなたがこの2つの、正確な文字列を置換する必要があると思いますし、また、コンテンツ

開始と終了の文字列:

"<video " 

"</video>" 

puts html_text.gsub("<video ","[[ video ]] ").gsub('</video>',"[[ video ]]") 

これは

irb(main):020:0> <div> 
[[ video ]] controls="controls" height="313" id="video201643154436" poster="/uploads/ckeditor/pictures/18/content_56883622_18f242e114.jpg" width="500"><source src="/uploads/ckeditor/attachments/23/newtons_law.mp4" type="video/mp4" />Your browser doesn&#39;t support video.<br /> 
Please download the file: <a href="/uploads/ckeditor/attachments/23/newtons_law.mp4">video/mp4</a>[[ video ]] 
</div> 

<div>test description</div> 

<div> 
<div> 
[[ video ]] controls="controls" height="300" id="video201644152011" poster="" width="400"><source src="/uploads/ckeditor/attachments/24/test.mp4" type="video/mp4" />Your browser doesn&#39;t support video.<br /> 
Please download the file: <a href="/uploads/ckeditor/attachments/24/test.mp4">video/mp4</a>[[ video ]] 
</div> 

<p>&nbsp;</p> 
</div> 
=> true 
を動作するはずです

または正規表現

puts html_text.gsub(/<\/?video[\s>]/, "[[ video ]]") 

<div> 
[[ video ]]controls="controls" height="313" id="video201643154436" poster="/uploads/ckeditor/pictures/18/content_56883622_18f242e114.jpg" width="500"><source src="/uploads/ckeditor/attachments/23/newtons_law.mp4" type="video/mp4" />Your browser doesn&#39;t support video.<br /> 
Please download the file: <a href="/uploads/ckeditor/attachments/23/newtons_law.mp4">video/mp4</a>[[ video ]] 
</div> 

<div>test description</div> 

<div> 
<div> 
[[ video ]]controls="controls" height="300" id="video201644152011" poster="" width="400"><source src="/uploads/ckeditor/attachments/24/test.mp4" type="video/mp4" />Your browser doesn&#39;t support video.<br /> 
Please download the file: <a href="/uploads/ckeditor/attachments/24/test.mp4">video/mp4</a>[[ video ]] 
</div> 

<p>&nbsp;</p> 
</div> 

最後にこのタグの内部をすべて削除すると、すべてのコンテンツがすべて置換されます。

/.*/m   multiline: . matches newline 
/.*/i   ignore case 
/.*/x   extended: ignore whitespace in pattern 

ので、最終的に我々は正規表現alltogether参加する場合は次のとおりです:

puts html_text.gsub(/<video\s.*?<\/video>/mix, "[[ video ]]") 

結果

irb(main):043:0> <div> 
[[ video ]] 
</div> 

<div>test description</div> 

<div> 
<div> 
[[ video ]] 
</div> 

<p>&nbsp;</p> 
</div> 
=> true 
+0

ご協力ありがとうございます。しかし、これは欲しいものではありません。 "controls =" controls "height =" 313 "id =" video201643154436 "poster ="/uploads/ckeditor/pictures/18/content_56883622_18f242e114.jpg "width =" 500 ">お使いのブラウザはビデオをサポートしていません'
ファイルをダウンロードしてください:video/mp4 ' – webster

+0

私は最終的な疑問を解決するためにソリューションを追加し、最後にポイント@rahulを取得します – anquegi

0

正規表現でhtmlを解析するのは非常に難しい作業です。私はnokogiriまたは類似の宝石を使用して、それを構文解析し、必要なノードを置き換えることを提案します。最初

+1

これは正しいですが、コメントでなければなりません。 –

0

anquegiの解決策の問題は、この修飾子が\ n文字を使用することです完璧に動作します。その間、私はノコギリを試しました:

str = "<div>\r\n<video controls=\"controls\" height=\"313\" id=\"video201643154436\" poster=\"/uploads/ckeditor/pictures/18/content_56883622_18f242e114.jpg\" width=\"500\"><source src=\"/uploads/ckeditor/attachments/23/newtons_law.mp4\" type=\"video/mp4\" />Your browser doesn&#39;t support video.<br />\r\nPlease download the file: <a href=\"/uploads/ckeditor/attachments/23/newtons_law.mp4\">video/mp4</a></video>\r\n</div>\r\n\r\n<div>test description</div>\r\n\r\n<div>\r\n<div>\r\n<video controls=\"controls\" height=\"300\" id=\"video201644152011\" poster=\"\" width=\"400\"><source src=\"/uploads/ckeditor/attachments/24/test.mp4\" type=\"video/mp4\" />Your browser doesn&#39;t support video.<br />\r\nPlease download the file: <a href=\"/uploads/ckeditor/attachments/24/test.mp4\">video/mp4</a></video>\r\n</div>\r\n\r\n<p>&nbsp;</p>\r\n</div>\r\n" 

doc = Nokogiri::HTML(str) 

doc.css("video").each do |video| 
    new_node = doc.create_element "p" 
    new_node.inner_html = "[[ Video ]]" 
    video.replace new_node 
end 

new_str = doc.css("body").to_s 
関連する問題