正则表达式仅替换模式内部

时间:2013-11-05 08:23:34

标签: ruby regex

我想替换方括号内的所有破折号,但保留不是的破折号。

字符串: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(/-/, '_'))

它有效,但我想知道是否有办法在一个表达式中执行此操作。

2 个答案:

答案 0 :(得分:5)

您可以将sub(或gsub)与块一起使用:

my_string.sub(/\[.*?\]/){|x|x.tr('-','_')}

答案 1 :(得分:0)

它是一个建议,我不认为它是一种理想的方式,但你实际上可以拆分句子,然后匹配返回的数组的第二个元素。

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]"