In Ruby, how do I do the following in one pass:
text.gsub(/==(. ?)==/){$1.upcase}.gsub(/=(. ?)=/){$1.downcase}
If text = "==aaa== =BBB=", return value should be "AAA bbb"
CodePudding user response:
You can use
text.gsub(/(={1,2})(.*?)\1/) { $1.length == 1 ? $2.downcase : $2.upcase}
See the Ruby demo and the regex demo.
Details:
(={1,2})- one or two=chars captured into Group 1(.*?)- Group 2: any zero or more chars other than line break chars as few as possible\1- the same text as captured in Group 1.
If Group 1 holds the = value, the replacement is the lowercased Group 2 value, else, it is the uppercased Group 2 value.
