1

角かっこ内にあるすべてのダッシュを置き換えたいが、そうでないものは残します。

弦:dont-change-this[only-change-inside-brackets]

結果:dont-change-this[only_change_inside_brackets]

私が現在行っている方法は、角括弧内のすべてをキャプチャしてから置き換えることです。

regex = /(\[([a-z-]+)\])/
testString = "dont-change-this[only-change-inside-brackets]"

testString.match regex
testString.sub(regex, $1.gsub(/-/, '_'))

それは機能しますが、これを1つの式だけで行う方法があるかどうか疑問に思っていました.

4

2 に答える 2

5

ブロックで sub (または gsub) を使用できます。

my_string.sub(/\[.*?\]/){|x|x.tr('-','_')}
于 2013-11-05T08:27:51.973 に答える
0

これは提案であり、理想的な方法だとは思いませんが、実際に文を分割して、返された配列の 2 番目の要素と一致させることができます。

2.0.0p247 :079 > str = "dont-change-this[only-change-inside-brackets]"
=> "dont-change-this[only-change-inside-brackets]"
2.0.0p247 :080 > s = str.split("[")
=> ["dont-change-this", "only-change-inside-brackets]"] 
2.0.0p247 :081 > s[1].gsub(/-/, '_')
=> "only_change_inside_brackets]" 
于 2013-11-05T08:58:37.487 に答える