2017-09-07 15 views
0

私は解決すべき問題があります。私は、このHTML構造最初のタグだけを取り除くためのヘルパー。

<h1><a href="http://...">This is the new Tesla.<span class="huge-title">Wow, 500 miles</span></a> | <a href="http://...">Video</a> | <a href="http://...">Gallery</a></h1> 

This is the new Tesla.Wow, 500 milesと強化され、タイトルのようなものを持っている私のCMSで

| | Gallery

この拡張タイトルは、ホームページのティーザーに使用します。最初のリンクはコンテンツに関連しており、ビデオ&は別のページにある他のコンテンツへのギャラリーリンクなので、3つの異なるリンクです。

もちろん、誰かがコンテンツをクリックしたとき、私はアンカータグを持っているので、ブログ記事内で同じタイトルを使用することはできません。

私は最初のアンカータグのコンテンツだけを保つヘルパーを記述する必要が

、そう

This is the new Tesla.<span class="huge-title">Wow, 500 miles</span> 

任意のヒント?

あなたは、この使用することができます
+0

おそらくhttps://github.com/comfy/active_link_toこの宝石はあなたを助けますか? – cnnr

+0

いいえ、コードなしのwysiwygエディタを使用してリンクを作成しています –

答えて

0

spanはどこにでも来ることができる場合は、単に基本的にあなたが<h1><a hrefで始まる文字列に一致、言っているロジックビット

match = original_title.match(/^<h1><a href.*?>(.*?<\/a>)/) 

puts match[1].gsub('</a>', '') 

This is the new Tesla.<span class="huge-title">Wow, 500 miles</span> 

を微調整する必要が

original_title = '<h1><a href="http://...">This is the new Tesla.<span class="huge-title">Wow, 500 miles</span></a> | <a href="http://...">Video</a> | <a href="http://...">Gallery</a></h1>' 

match = original_title.match(/^<h1><a href.*?>(.*?<\/span>)/) 


puts match[1] 

This is the new Tesla.<span class="huge-title">Wow, 500 miles</span> 

を(^で示される)、最初に>(アンカータグの末尾には>となる)が見つかるまで、任意の数の文字が続き、キャプチャ後ただちにグループ.*で示される任意の数の文字で、</span>が最初に出現するまで、?で表示されます(?がない場合は最後のスパンタグまですべて一致します)。 、これは貪欲ではなく、あなたの後に何が起こったのか最初に出てくるところで停止します)。これにより、一致する配列が返されます。最初のインデックスはキャプチャされたコンテンツの総数で、残りの各キャプチャグループは一致します。この場合、キャプチャグループであるため、2番目のアイテムが必要です。

+0

私は試してみますが、時にはスパンが途中にあり、時には最後になることもあります。基本的に、このスパンは著者のタイトルの一部を証拠付けするために使われます。たぶんnokogiriを使って最初のAを見つけて内容を取得する方が良いでしょう。 –

+0

もっと複雑な正規表現を書かなければならないか、マッチする前にspanタグからタイトルを取り除かなければならないでしょう。 nokogiriでは最初の ''を見つけ、ノードから '.text'を抽出するか、スパンを内部に保持したい場合には' .inner_html'を抽出するだけでかなり簡単です。 –

関連する問題