Rails helper只剥离第一个标签

时间:2017-09-07 08:13:29

标签: ruby-on-rails regex

我有一个问题要解决。

在我的CMS中,我有一种使用此HTML结构的增强标题

body {
    display: grid;
    grid-template-rows: auto 1fr auto;
    grid-template-columns: 1fr auto;
    min-height: 100vh;
    overflow: hidden;
}

This is the new Tesla.Wow, 500 miles | Video | Gallery

我在主页中使用此增强标题作为预告片。第一个链接与内容,视频和& gallery链接到不同页面上的其他内容,因此有三个不同的链接。

当然,当有人点击内容时,我不能在博文中使用相同的标题,因为我有锚标签。

我需要编写一个只保留第一个锚标记内容的帮助器,所以

<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>

任何提示?

1 个答案:

答案 0 :(得分:0)

您可以使用:

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可以到达任何地方,你只需稍微调整一下逻辑

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>

基本上你说的是,匹配以<h1><a href开头的字符串(由^表示),后跟任意数量的字符,直到找到第一个>(这将是关闭锚标记的>,然后在捕获一个组(由未转义的弯曲括号表示)后立即使用.*指示的任意数量的字符,直到找到第一次出现的</span> 1}},由?表示(没有?如果你有更多的结束范围标记它将匹配所有内容,直到最后一个span标记,这样它就不贪婪并在第一次出现时停止你之后)。这将返回一个匹配数组,其中第一个索引是捕获的总内容,以及剩余的每个捕获组。在这种情况下,您需要第二个项目,因为它是捕获组。