## JavaScript (ES6), 76 Bytes <!-- language-all: lang-js --> s=s.replace(/(\S+ +(\S+))\(s\)/g,(_,a)=>a+("s"[+/^(1|one|an?)\b/i.test(a)]||"")) ### 74 Byte version (less robust, `\b`) s=s.replace(/(\S+ +(\S+))\(s\)/g,(_,a)=>a+("s"[+/^(1|one|an?)/i.test(a)]||"")) This is a modified version of ETHproductions' (I don't have 50 rep.) ### Explanation - `/(\S+ +(\S+))\(s\)/g` - the actual pattern to look for (`amount object(s)`) - `(_,a)=>a` - `_` is a catch all variable, `a` is the `(\S+ +(\S+))` - `"s"[+/^(1|one|an?)/i.test(a)]||""` - instead of slicing the array, just make a dummy array and get the index (`+/.../.test` returns a number) - should `"s"[+/^(1|one|an?)/i.test(a)]` return `undefined` (`true`, or `1` for the test) return `""`