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(/-/, '_'))

它有效,但我想知道是否有一种方法可以在一个表达式中做到这一点。

4

2 回答 2

5

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

my_string.sub(/\[.*?\]/){|x|x.tr('-','_')}
于 2013-11-05T08:27:51.973 回答
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]" 
于 2013-11-05T08:58:37.487 回答