2012-08-27 41 views
0

下面是一個更復雜的一個對我來說:匹配子模式導致

我有這樣被拉進一個哲基爾帖子內容:

# Lorem ipsum dolor sit amet. 
Consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore. 
~ 
# Et dolore magna aliqua. 
Ut enim ad minim veniam, quis nostrud exercitation. 
~ 
# Ullamco laboris nisi. 
Ut aliquip ex ea commodo consequat. 
~ 

我拉進我的佈局這個喜歡這個:{{ post.content | jekreged: 1 | markdownify }}

Jekreged是我寫的一個自定義液體插件,它根據~分割內容,然後指定要包含的內容。佈局需要撕開這樣的帖子。

我想適應這個,然後運行匹配命令的子集,我可以專門從液體標籤調用。

這裏是我試圖排除故障的示例(和那個不工作)。

module Jekyll 
    module AssetFilter 
    def jekreged(input, chunk) 
     drugs = input.split("~")[chunk] 
     title = (drugs).match(/^#{1}.+$/) 
     jekreged = "#{title}" 
    end 
    end 
end 

Liquid::Template.register_filter(Jekyll::AssetFilter) 

我從此沒有得到任何輸出。我理想上喜歡的是能夠將「標題」指定爲液體標籤中的參數,但我不確定如何將其連接到插件。

長距離版本,我會碰到這樣的標題= regmatch爲標題,正文= ...,IMG = ...

感謝任何及所有的幫助!

回答

0

對它進行了一番嘗試(未來,一些示例輸入/輸出將會有很長的路要走)。

module Jekyll 
    module AssetFilter 
    def jekreged(input, matcher) 
     titles = input.split("\n~\n").select { |title| title.include? matcher } 
     if titles.size > 1 
     raise "Can't determine title from #{matcher.inspect}, found #{titles.inspect}" 
     elsif titles.size.zero? 
     raise "#{matcher.inspect} didn't match any of #{titles.inspect}" 
     end 
     titles.first 
    end 
    end 
end 

describe 'jekreged' do 
    include Jekyll::AssetFilter 
    let(:titles) { <<-TITLES.gsub /^ /, "" } 
    # Lorem ipsum dolor sit amet. 
    Consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore. 
    ~ 
    # Et dolore magna aliqua. 
    Ut enim ad minim veniam, quis nostrud exercitation. 
    ~ 
    # Ullamco laboris nisi. 
    Ut aliquip ex ea commodo consequat. 
    ~ 
    TITLES 

    it 'finds the title that has the string in it' do 
    jekreged(titles, "Consectetur").should == "# Lorem ipsum dolor sit amet.\nConsectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore." 
    jekreged(titles, "minim veniam").should == "# Et dolore magna aliqua.\nUt enim ad minim veniam, quis nostrud exercitation." 
    jekreged(titles, "aliquip" ).should == "# Ullamco laboris nisi.\nUt aliquip ex ea commodo consequat." 
    end 

    it 'raises an error if there is more than one title that matches' do 
    expect { jekreged titles, 'Ut' }.to raise_error /Can't determine title/ 
    end 

    it 'raises an error if there are no titles that match' do 
    expect { jekreged titles, 'asdfasdfasdf' }.to raise_error /didn't match/ 
    end 
end 
+0

感謝您的輸入 - 我結束了稍微不同的變化,這是多一點「哈克」,但適合我所需要的。我喜歡這個實現。 – motleydev