我想替换方括号内的所有破折号,但保留不是的破折号。
字符串: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(/-/, '_'))
它有效,但我想知道是否有办法在一个表达式中执行此操作。
答案 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]"