突出显示文本

问题描述:

时候我有一个字符串:Something 8:45 foo bar foo bar at 23:50突出显示文本

如何突出和标记与<b>标签的所有时间组合,串状8:45和23:50? 因此,我希望有Something <b>8:45</b> foo bar foo bar at <b>23:50</b>

你可以这样做:

"Something 8:45 foo bar foo bar at 23:50".gsub(/\d{1,2}:\d{2}/).each {|hour| hour = "<b>#{hour}<b>" } 

识别小时,用<b>hour<b>

+0

这不是问什么。 – sawa 2011-05-20 19:31:38

+0

谢谢JCorcuera! – Kir 2011-05-20 19:38:03

+0

你不需要'each','gsub'可以占据一个块。但是你也不需要,因为它可以在'gsub'中直接完成(参见下面的答案)。 – 2011-05-20 20:07:50

容易

替换([0-9] {1,2}:[0-9] {1,2})与 '$ 1'

+0

这只是返回相同的字符串。使用括号和'$ 1'是多余的。改用'$ 0'。 – sawa 2011-05-20 19:32:37

使用以下正则表达式/((2[0-3])|(1[0-9])|(0?[0-9])):([0-5]?[0-9])/匹配,因为它还会检查时间是正确的格式

+0

请解释这个正则表达式有什么问题,所以它得到了一个downvote – 2011-05-20 20:06:20

+0

我会在分钟的第一个数字中说'?',因为没有人会在下午13:4记录。我喜欢你限制正则表达式只匹配有效时间。 – Chubas 2011-05-20 20:26:43

>> "Something 8:45 foo bar foo bar at 23:50".gsub(/\b\d{1,2}:\d{2}\b/, '<b>\0</b>') 
#=> "Something <b>8:45</b> foo bar foo bar at <b>23:50</b>" 

编辑替换每一个:如果你需要,你可以为正确的时间正则表达式检查,但我并没有理会这个例子。