我尝试获取一个用于在捕获的字符串周围设置 < b > 的函数(不区分大小写),如下所示:
bold_string("Hello everyone","o")
> "Hell<b>o</b> every<b>o</b>ne"
bold_string("HEllo evEryonE", "e")
> "H<b>E</b>llo <b>e</b>v<b>E</b>ryon<b>E<b/>"
现在,我的功能如下所示:
def bold_string(str, search)
str.gsub(/(#{search})/i, '<b>\1</b>')
end
它与前面的示例完美配合,但不适用于带有重音的单词。有我期望的结果:
bold_string("Petite bête", "e")
> "P<b>e</b>tit<b>e</b> b<b>ê</b>t<b>e</b>"
bold_string("Petite bête", "ê")
> "P<b>e</b>tit<b>e</b> b<b>ê</b>t<b>e</b>"
换句话说,我必须找到一个像 /search/i 这样的正则表达式,它说“你必须找到单词'search'或带有一些重音的单词'search'”。
编辑 :
我看到我的例子太简单了......它应该适用于字符串而不是简单的字符:
bold_string("Petite bête", "êt")
> "P<b>et</b>ite</b> b<b>êt</b>e"
问候
皮埃尔
edit2: 我使用了 FJ 的解决方案和这个新功能
def regex_from_string_including_accents(str)
accents = ['aàâ', 'eéèêë', 'oöô' 'iî']
return str.gsub(/./) do |letter|
accent_group = accents.detect{|group| group.include?(letter)}
accent_group ? "[#{accent_group}]" : letter
end
end