2010-05-25 120 views
2

我在Ruby中使用gsub使文本中的單詞變爲粗體。我使用的是單詞邊界,以避免使用其他字母中的字母粗體,但是我發現這忽略了後面帶有引號的單詞。例如:在正則表達式中忽略字符和字邊界

text.gsub(/#{word}\b/i, "<b>#{word}</b>") 

text = "I said, 'look out below'" 
word = below 

在這種情況下,下面的字是不是做出了大膽的。有什麼方法可以忽略某些字符和字邊界?

回答

2

所有在Regexp.new中轉義的東西看起來都很難看。你可以大大簡化,通過使用一個RegExp文字:

word = 'below' 
text = "I said, 'look out below'" 

reg = /\b#{word}\b/i 
text.gsub!(reg, '<b>\0</b>') 

此外,您可以直接使用的gsub!的修飾形式,除非該字符串在代碼中的其他一些地方,你是不是向我們展示別名。最後,如果您在gsub調用中使用單引號字符串,則不需要轉義反斜槓。

0

#{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日期」結束。

+0

這對我來說是一個值得驕傲的時刻 - 我的第一次Ruby!我使用http://www.ruby.ch/interpreter/rubyinterpreter.shtml測試了代碼,並引用了顯然有用的文檔。 – Kobi 2010-05-25 04:56:39

+0

好的謝謝。不過,我使用的是Ruby,寧願堅持使用gsub方法。我使用#{word}來傳遞我想強調的單詞。所以在這個例子中,word ='below' – DavidP6 2010-05-25 07:06:06

相關問題