我在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