這個怎麼樣?
def forem_emojify(content)
h(content).to_str.gsub(':)', ':smile:').gsub(';)', ':wink:').gsub(/:([a-z0-9\+\-_]+):/) do |match|
if Emoji.names.include?($1)
'<img alt="' + $1 + '" height="20" src="' + asset_path("emoji/#{$1}.png") + '" style="vertical-align:middle" width="20" />'
else
match
end
end.html_safe if content.present?
end
編輯更多的信息:
爲什麼我們不能只使用edit_emoji
和add_alias
方法呢?
好了,就可以了,就像這樣:
Emoji.edit_emoji(Emoji.find_by_alias('smile')) do |emoji|
emoji.add_alias(":)")
end
是完全的作品!現在,你可以這樣做:
emoji = Emoji.find_by_alias(":)") #=> #<Emoji::Character:smile(1f604)>
emoji.name #=> "smile"
emoji.aliases #=> ["smile", ":)"]
emoji.raw #=>
但這裏的問題:當你有像註釋未知的輸入,你必須要找到註釋中的別名。
content = "I'm so happy :grinning: lol I just wanna :) but I'm :grimacing:"
emoji_pattern = /:([a-z0-9\+\-_]+):/
content.scan(emoji_pattern) #=> [["grinning"], ["grimacing"]]
你可以看到,當你有一個字符串,並使用代碼示例中的正則表達式。它只能找到以冒號開頭和結尾的子字符串。您還可以看到它從冒號中提取別名,然後使用name-without-colons來查找別名的表情符號。我們的自定義別名:)不適合該模式 - 它以冒號開頭,但不以一個結尾...
那麼你能做什麼?對不起,但我不知道! GitHub建議使用一個字符來定義別名 - 這很有道理 - 很難在大塊文本中找到重要的子字符串。你可以嘗試改進正則表達式來查找你的別名嗎?
很酷!但是我注意到一些關於Gemoji自述中的別名的新東西。你認爲像這樣的工作? https://gist.github.com/frankie-loves-jesus/2a0ab7920b1e232a557d –
@MarkBoulder增加了一些後續行動。對不起,如果它不是太令人滿意:wink: –
非常感謝你最大 - 真正體面的答案!我欠你一個人情! –