[英]Ruby regular expression for asterisks/underscore to strong/em?
作为我正在编写的聊天应用程序的一部分,我需要使用正则表达式来匹配聊天消息中的星号和下划线,并将它们转换为<strong>
和<em>
标记。 由于我对正则表达式感到很糟糕,所以我真的被困在这里。 理想情况下,我们将其设置为:
上面的参数按重要性顺序排列,只有#1是完全必要的-其他参数仅是漂亮。 我最接近可行的方法是:
text = text.sub(/\*([(0-9a-zA-Z).*])\*/,'<b>\1<\/b>')
text = text.sub(/_([(0-9a-zA-Z).*])_/,'<i>\1<\/i>')
但这显然不适用于我们的任何参数。
奇怪的是,鉴于使用星号表示粗体和诸如此类的用法很普遍,目前还没有类似的例子。 如果存在,我将无法在插件/宝石之外找到它(该插件不适用于该实例,因为我实际上仅在模型中的一个地方需要它)。 任何帮助,将不胜感激。
这应该可以帮助您完成自己的工作:
sub(/\*(.*)\*/,'<b>\1</b>')
sub(/_(.*)_/,'<i>\1</i>')
首先,您的条件有点奇怪,但是,好吧...
看来,可能的算法是找到一条消息中的匹配项数量,对它们进行计数以查看是否少于4个,然后尝试执行一组替换。
strong_regexp = /\*([^\*]*)\*/
em_regexp = /_([^_]*)_/
def process(input)
if input ~= strong_regexp && input.match(strong_regexp).size < 4
input.sub strong_regexp, "<b>\1<\b>"
elsif input ~= em_regexp && intput.match(em_regexp).size < 4
input.sub em_regexp, "<i>\1<\i>"
end
end
您的规格尚不完全清楚,但是如果您了解这一点,则可以自己进行调整。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.