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