2

まだラップされていない場合にのみ、ルビーで文字列を括弧で囲もうとしています。

"my string (to_wrap)" => "my string (to_wrap)"
"my string to_wrap" => "my string (to_wrap)"

私は次のようなことを試しました:

to_wrap = 'to_wrap'
regexp = Regexp.new "(?!\()#{to_wrap}(?!\))"
string.sub(regexp, "(#{to_wrap})")

しかし、それは機能しません。

前もって感謝します!

4

1 に答える 1

3

あなたはとても近いです。ただし、最初のネガティブなルックアラウンドは先読みです。したがって、の最初の文字を調べますto_wrap。それを後ろから見てください:

"(?<!\()#{to_wrap}(?!\))"

そして、かっこをエスケープするための代替オプションを提示するだけです(実際にはどちらを使用するかは好みの問題ですが、読みやすくなっています)。

"(?<![(])#{to_wrap}(?![)])"
于 2012-11-25T10:43:00.503 に答える