C# short solution (Regex, Linq and GCD)
Felt like having fun with LINQ.\n\n\nusing System.Text.RegularExpressions;\n\npublic class Solution\n{\n    public string FractionAddition(string expression)\n 
Felt like having fun with LINQ.\n\n```\nusing System.Text.RegularExpressions;\n\npublic class Solution\n{\n    public string FractionAddition(string expression)\n    {\n        return string.Join("/", \n            Regex.Matches(expression, @"(-?\\d+)\\/(\\d+)").OfType<Match>()\n            .Select(m => new[] { int.Parse(m.Groups[1].Value), int.Parse(m.Groups[2].Value) })\n            .Aggregate(new[] { 0, 1 }, (p, c) => Normalize(p[0] * c[1] + p[1] * c[0], p[1] * c[1])));\n    }\n\n    private int Gcd(int a, int b) => a == 0 ? Math.Abs(b) : Gcd(b % a, a);\n\n    private int[] Normalize(int n, int d) => new[] { n / Gcd(n, d), d / Gcd(n, d) };\n}\n```\n\n1. First we convert the string expression to an enumerable of fractions. Each fraction is an int[2] array. Regular expression expects fractions like "n/d" where n could be negative. Plus signs are disregarded completely, we don't need them:\n```\nRegex.Matches(expression, @"(-?\\d+)\\/(\\d+)").OfType<Match>()\n    .Select(m => new[] { int.Parse(m.Groups[1].Value), int.Parse(m.Groups[2].Value) })\n```\n2. Next we aggregate the results (this Linq function's analogue in javascript is called `reduce`, for example). We always start from value 0/1 and then sum it with the first number using the fraction rules from school: `a/b + c/d = (a*d + b*c) / b * d`. After that we use the `Normalize` helper function, which finds the greatest common denominator for numerator and denominator and uses it to normalize our current fraction.\n```\n.Aggregate(new[] { 0, 1 }, (p, c) => Normalize(p[0] * c[1] + p[1] * c[0], p[1] * c[1])));\n```\n3. After the last number was added, the resulting nominator and denominator are joined with "/" in between them with: ```string.Join```
[]