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
呼び出し内で一重引用符で囲まれた文字列リテラルを使用する場合は、円記号をエスケープする必要はありません。
境界 には十分注意してください。これが理由です。\b
構文は正規表現では#{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
stingを使用する場合は、にエスケープする必要があることに注意してください。そうしない\\b
と、バックスペースとして解釈されます。word
特殊な正規表現文字が含まれている可能性がある場合は、を使用してエスケープしRegexp.escape
ます。
また、弦を交換する<b>#{word}</b>
ことにより、弦のケーシングを変更することができます。「BeloW」は「下」に置き換えられます。\0
見つかった単語に置き換えることでこれを修正します。また、冒頭で付け加えましたが、「日\\b
」を探したくなくて「太陽の日」になってしまいます。