我在Ruby中使用gsub使文本中的单词变为粗体。我使用的是单词边界,以避免使用其他字母中的字母粗体,但是我发现这忽略了后面带有引号的单词。例如:在正则表达式中忽略字符和字边界
text.gsub(/#{word}\b/i, "<b>#{word}</b>")
text = "I said, 'look out below'"
word = below
在这种情况下,下面的字是不是做出了大胆的。有什么方法可以忽略某些字符和字边界?
我在Ruby中使用gsub使文本中的单词变为粗体。我使用的是单词边界,以避免使用其他字母中的字母粗体,但是我发现这忽略了后面带有引号的单词。例如:在正则表达式中忽略字符和字边界
text.gsub(/#{word}\b/i, "<b>#{word}</b>")
text = "I said, 'look out below'"
word = below
在这种情况下,下面的字是不是做出了大胆的。有什么方法可以忽略某些字符和字边界?
所有在Regexp.new
中转义的东西看起来都很难看。你可以大大简化,通过使用一个RegExp文字:
word = 'below'
text = "I said, 'look out below'"
reg = /\b#{word}\b/i
text.gsub!(reg, '<b>\0</b>')
此外,您可以直接使用的gsub!
的修饰形式,除非该字符串在代码中的其他一些地方,你是不是向我们展示别名。最后,如果您在gsub
调用中使用单引号字符串,则不需要转义反斜杠。
#{word}
语法不适用于正则表达式。使用Regexp.new
代替:
word = "below"
text = "I said, 'look out below'"
reg = Regexp.new("\\b#{word}\\b", true)
text = text.gsub(reg, "<b>\\0</b>")
注意,使用蜇当你需要逃避\b
到\\b
,或者它被解释为退格键。如果word
可能包含特殊的正则表达式字符,请使用Regexp.escape
将其转义。
此外,通过将字符串替换为<b>#{word}</b>
,您可以更改字符串的外壳:“BeloW”将替换为“下方”。 \0
通过替换找到的单词来纠正此问题。另外,我在开头添加了\\b
,您不希望查找“天”,并以“sun日期”结束。
是非常小心你的\b
界限。 Here’s why。
这对我来说是一个值得骄傲的时刻 - 我的第一次Ruby!我使用http://www.ruby.ch/interpreter/rubyinterpreter.shtml测试了代码,并引用了显然有用的文档。 – Kobi 2010-05-25 04:56:39
好的谢谢。不过,我使用的是Ruby,宁愿坚持使用gsub方法。我使用#{word}来传递我想强调的单词。所以在这个例子中,word ='below' – DavidP6 2010-05-25 07:06:06