Если строка прикрас, (т.е. , без меток), либо из этих работ хорошо:
data = 'Main Idea, key term, key term, key term'
# example #1
/^(.+?,)(.+)/.match(data).captures.each_slice(2).map { |a,b| a << %Q{<span class="smaller_font">#{ b }</span>}}.first
# => "Main Idea, <span class=\"smaller_font\">key term, key term, key term</span>"
# example #2
data =~ /^(.+?,)(.+)/
$1 << %Q{<span class="smaller_font">#{ $2 }</span>}
# => "Main Idea, <span class=\"smaller_font\">key term, key term, key term</span>"
Если строка содержит теги, то использование регулярного выражения для обработки HTML или XML не рекомендуется, так как оно легко ломается. Чрезвычайно тривиальное использование против HTML, которым вы управляете, довольно безопасно, но если содержимое или формат меняются, регулярное выражение может разваливаться, нарушая ваш код.
HTML-парсеры являются обычно рекомендуемым решением, потому что они будут продолжать работать, если изменяется содержимое или его форматирование. Это то, что я сделал бы с помощью Нокогири. Я намеренно многословно объяснять, что происходит:
require 'nokogiri'
# build a sample document
html = '<a href="stupidreqexquestion">Main Idea, key term, key term, key term</a>'
doc = Nokogiri::HTML(html)
puts doc.to_s, ''
# find the link
a_tag = doc.at_css('a[href=stupidreqexquestion]')
# break down the tag content
a_text = a_tag.content
main_idea, key_terms = a_text.split(/,\s+/, 2) # => ["Main Idea", "key term, key term, key term"]
a_tag.content = main_idea
# create a new node
span = Nokogiri::XML::Node.new('span', doc)
span['class'] = 'smaller_font'
span.content = key_terms
puts span.to_s, ''
# add it to the old node
a_tag.add_child(span)
puts doc.to_s
# >> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" "http://www.w3.org/TR/REC-html40/loose.dtd">
# >> <html><body><a href="stupidreqexquestion">Main Idea, key term, key term, key term</a></body></html>
# >>
# >> <span class="smaller_font">key term, key term, key term</span>
# >>
# >> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" "http://www.w3.org/TR/REC-html40/loose.dtd">
# >> <html><body><a href="stupidreqexquestion">Main Idea<span class="smaller_font">key term, key term, key term</span></a></body></html>
В выводе выше вы можете увидеть, как Nokogiri построен образец документа, продолжительность добавляемый, и итоговый документ.
Это может быть упрощена:
require 'nokogiri'
doc = Nokogiri::HTML('<a href="stupidreqexquestion">Main Idea, key term, key term, key term</a>')
a_tag = doc.at_css('a[href=stupidreqexquestion]')
main_idea, key_terms = a_tag.content.split(/,\s+/, 2)
a_tag.content = main_idea
a_tag.add_child("<span class='smaller_font'>#{ key_terms }</span>")
puts doc.to_s
# >> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" "http://www.w3.org/TR/REC-html40/loose.dtd">
# >> <html><body><a href="stupidreqexquestion">Main Idea<span class="smaller_font">key term, key term, key term</span></a></body></html>
Есть причина, вы не включили в последний ключевой термин в пролете? – Skilldrick
na, это опечатка – s84
Основная идея всегда указана первыми? – tinifni