2

Rubyでgsubを使用して、テキスト内の単語を太字にします。他の単語内の文字を太字にしないように単語境界を使用していますが、これは単語の後に引用符が付いている単語を無視することがわかりました。例えば:

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

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

この場合、以下の単語は太字になりません。単語の境界とともに特定の文字を無視する方法はありますか?

4

3 に答える 3

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呼び出し内で一重引用符で囲まれた文字列リテラルを使用する場合は、円記号をエスケープする必要はありません。

于 2010-05-25T07:03:03.767 に答える
2

境界 は十分注意してください。これが理由です。\b

于 2010-11-18T13:49:23.950 に答える
-1

構文は正規表現では#{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>")

\bstingを使用する場合は、にエスケープする必要があることに注意してください。そうしない\\bと、バックスペースとして解釈されます。word特殊な正規表現文字が含まれている可能性がある場合は、を使用してエスケープしRegexp.escapeます。

また、弦を交換する<b>#{word}</b>ことにより、弦のケーシングを変更することができます。「BeloW」は「下」に置き換えられます。\0見つかった単語に置き換えることでこれを修正します。また、冒頭で付け加えましたが、「\\b」を探したくなくて「太陽の日」になってしまいます。

于 2010-05-25T04:48:16.660 に答える